#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 |