0

我正在尝试了解 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));...
4

2 回答 2

2

阅读此 wiki 页面, http ://en.wikipedia.org/wiki/Viola%E2%80%93Jones_object_detection_framework

有一个著名的算法叫做 Viola Jones 方法: http ://research.microsoft.com/en-us/um/people/viola/Pubs/Detect/violaJones_CVPR2001.pdf

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

于 2013-03-22T18:46:04.360 回答
0

在 OpenCV 库中,一个矩形由两个角组成,所以

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

CvRect* rectangle = (CvRect*)cvGetSeqElem(faces, i);

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

cvRectangle(frame, point1, point2, CV_RGB(255,0,0));
于 2013-03-17T08:22:08.357 回答