分类器下载地址

detectMultiScale返回检测范围内检测到的目标的相对坐标!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <bits/stdc++.h>  
#include <opencv2/opencv.hpp>
#include<opencv2/objdetect/objdetect.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
Mat src;
CascadeClassifier face_cascade, eye_cascade;
void detect(Mat src) {
namedWindow("win", WINDOW_AUTOSIZE);
Mat src_gray;
cvtColor(src, src_gray, COLOR_BGR2GRAY);
equalizeHist(src_gray, src_gray);
vector<Rect>faces;
face_cascade.detectMultiScale(src_gray, faces, 1.1, 3, 0, Size(70, 70), Size(100, 100));
if (faces.size() > 0) {
for (auto face : faces) {
Rect rect_face(face.x, face.y, face.width, face.height);
rectangle(src, rect_face, Scalar(0, 255, 0), 1, 8, 0);

vector<Rect>eyes;
Mat face_src = src_gray(face);
eye_cascade.detectMultiScale(face_src, eyes, 1.1, 1, 0, Size(3,3));
for (auto eye : eyes) {
Rect rect_eye(face.x + eye.x, face.y + eye.y, eye.width, eye.height);
rectangle(src, rect_eye, Scalar(255, 0, 0), 1, 8, 0);
}

}
}
imshow("win", src);
}
int main() {
face_cascade.load("D:/OpenCV/test/haarcascade_frontalface_default.xml");
eye_cascade.load("D:/OpenCV/test/haarcascade_eye_tree_eyeglasses.xml");
VideoCapture cap(0);
while (1) {
cap >> src;
Mat srcGray, edge;
cvtColor(src, srcGray, COLOR_RGB2GRAY);
detect(src);
if (waitKey(1) == ' ')break;
}
return 0;
}