我需要在opencv
中解释面部检测的以下循环VideoCapture capture("DSC_0772.avi"); //-1, 0, 1 device id
Mat cap_img,gray_img;
vector<Rect> faces, eyes;
while(1)
{
capture >> cap_img;
waitKey(10);
cvtColor(cap_img, gray_img, CV_BGR2GRAY);
cv::equalizeHist(gray_img,gray_img);
face_cascade.detectMultiScale(gray_img, faces, 1.1, 5, CV_HAAR_SCALE_IMAGE | CV_HAAR_DO_CANNY_PRUNING, cvSize(0,0), cvSize(300,300));
for(int i=0; i < faces.size();i++)
{
Point pt1(faces[i].x+faces[i].width, faces[i].y+faces[i].height);
Point pt2(faces[i].x,faces[i].y);
rectangle(cap_img, pt1, pt2, cvScalar(0,255,0), 2, 8, 0);
}
我不了解faces [i] .x和其他的循环参数
如何选择它们进行面部检测
感谢您的帮助
答案 0 :(得分:0)
faces
是std::vector
的Rect
。所以for循环遍历Rect
r中的每个vecto
,它创建了两个点。 Rect
不仅存储x和y(左上角),还存储矩形的高度和宽度。所以faces[i].x+faces[i].width
取矩形的x坐标加上它的宽度,faces[i].y+faces[i].height
取矩形的y坐标加上它的高度。这是获得矩形的对角。然后,您将这些点加上图像输入rectangle()
函数。