Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cvHaarDetectObjects是如何工作的?_C++_Opencv_Face Detection - Fatal编程技术网

C++ cvHaarDetectObjects是如何工作的?

C++ cvHaarDetectObjects是如何工作的?,c++,opencv,face-detection,C++,Opencv,Face Detection,我正在努力学习cvHaarDetectObjects是如何工作的。。。 我无法想象它是如何工作的。。。如何计算积分图像并找到一张脸 我们在面部区域放置一个矩形。。。我们如何找到这个地区 if (faces) { for(int i = 0; i < faces->total; ++i) { CvPoint point1, point2; CvRect* rectangle = (CvRect*)cvGetSeqElem(faces, i

我正在努力学习cvHaarDetectObjects是如何工作的。。。 我无法想象它是如何工作的。。。如何计算积分图像并找到一张脸

我们在面部区域放置一个矩形。。。我们如何找到这个地区

if (faces)
{
    for(int i = 0; i < faces->total; ++i)
    {
        CvPoint point1, point2;
        CvRect* rectangle = (CvRect*)cvGetSeqElem(faces, i);
        point1.x = rectangle->x;
        point2.x = (rectangle->x + rectangle->width);
        point1.y = rectangle->y;
        point2.y = (rectangle->y + rectangle->height);
        cvRectangle(frame, point1, point2, CV_RGB(255,0,0));...
if(面)
{
对于(int i=0;itotal;++i)
{
点1,点2;
CvRect*矩形=(CvRect*)cvGetSeqElem(面,i);
点1.x=矩形->x;
点2.x=(矩形->x+矩形->宽度);
点1.y=矩形->y;
点2.y=(矩形->y+矩形->高度);
cvRectangle(帧,点1,点2,CV_RGB(255,0,0));。。。

在OpenCV库中,矩形由两个角组成,因此

point1.x = rectangle->x;
point2.x = (rectangle->x + rectangle->width);
point1.y = rectangle->y;
point2.y = (rectangle->y + rectangle->height);

获取检测面的位置,它使用这些x和y坐标,用它们组成所需的两个品脱(上面的代码),然后用点作为参数绘制矩形:

cvRectangle(frame, point1, point2, CV_RGB(255,0,0));
阅读这个维基页面,

有一种著名的算法叫做Viola-Jones方法:


希望它能帮助您理解它是如何工作的。

这只是关于矩形。识别“面”是指xml格式的haar文件,其中包含多个注释(面特征、距离、形状),因此它可以在图像(静止图像、视频帧等)中找到面。
cvRectangle(frame, point1, point2, CV_RGB(255,0,0));