본문 바로가기

OpenCV

ch13 cascade

#python 

import cv2
import numpy as np

def detect_face():
    src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch13\\cascade\\kids.png")

    if src is None:
        print("Image load failed!")
        return

    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

    if face_cascade.empty():
        print("XML load failed!")
        return

    faces = face_cascade.detectMultiScale(src)

    for rc in faces:
        cv2.rectangle(src, rc, (255, 0, 255), 2)

    cv2.imshow("src", src)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

def detect_eyes():
    src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch13\\cascade\\kids.png")

    if src is None:
        print("Image load failed!")
        return

    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')

    if face_cascade.empty() or eye_cascade.empty():
        print("XML load failed!")
        return

    faces = face_cascade.detectMultiScale(src)

    for face in faces:
        x, y, w, h = face
        cv2.rectangle(src, (x, y), (x+w, y+h), (255, 0, 255), 2)
        face_roi = src[y:y+h, x:x+w]
        eyes = eye_cascade.detectMultiScale(face_roi)

        for eye in eyes:
            ex, ey, ew, eh = eye
            center = (x + ex + ew // 2, y + ey + eh // 2)
            cv2.circle(face_roi, center, ew // 2, (255, 0, 0), 2, cv2.LINE_AA)

    cv2.imshow("src", src)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

def main():
    detect_face()
    detect_eyes()

if __name__ == "__main__":
    main()

// C++

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

void detect_face();
void detect_eyes();

int main()
{
	detect_face();
	detect_eyes();

	return 0;
}

void detect_face()
{
	Mat src = imread("kids.png");

	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	CascadeClassifier classifier("haarcascade_frontalface_default.xml");

	if (classifier.empty()) {
		cerr << "XML load failed!" << endl;
		return;
	}

	vector<Rect> faces;
	classifier.detectMultiScale(src, faces);

	for (Rect rc : faces) {
		rectangle(src, rc, Scalar(255, 0, 255), 2);
	}

	imshow("src", src);

	waitKey(0);
	destroyAllWindows();
}

void detect_eyes()
{
	Mat src = imread("kids.png");

	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	CascadeClassifier face_classifier("haarcascade_frontalface_default.xml");
	CascadeClassifier eye_classifier("haarcascade_eye.xml");

	if (face_classifier.empty() || eye_classifier.empty()) {
		cerr << "XML load failed!" << endl;
		return;
	}

	vector<Rect> faces;
	face_classifier.detectMultiScale(src, faces);

	for (Rect face : faces) {
		rectangle(src, face, Scalar(255, 0, 255), 2);

		Mat faceROI = src(face);
		vector<Rect> eyes;
		eye_classifier.detectMultiScale(faceROI, eyes);

		for (Rect eye : eyes) {
			Point center(eye.x + eye.width / 2, eye.y + eye.height / 2);
			circle(faceROI, center, eye.width / 2, Scalar(255, 0, 0), 2, LINE_AA);
		}
	}

	imshow("src", src);

	waitKey(0);
	destroyAllWindows();
}

C++ Code 출처 : OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝 - 황선규 저


'OpenCV' 카테고리의 다른 글

ch13 QRCode  (0) 2024.05.21
ch13 hog  (0) 2024.05.21
ch12 polygon  (0) 2024.05.21
ch12 labeling  (0) 2024.05.21
ch12 findcts  (0) 2024.05.21