Я пытаюсь узнать, как работает 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));...
Прочитайте эту вики-страницу,
http://en.wikipedia.org/wiki/Viola%E2%80%93Jones_object_detection_framework
Есть известный алгоритм, называемый методом Виолы Джонса:
http://research.microsoft.com/en-us/um/people/viola/Pubs/Detect/violaJones_CVPR2001.pdf
Надеюсь, это поможет вам понять, как это работает.
Прямоугольник в библиотеке OpenCV состоит из двух углов, SO
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));