Поиск по блогу

воскресенье, 11 апреля 2010 г.

OpenCV. HaarClassifier

OpenCV. Обнаружение объектов. Haar-классификатор.

 
#include <stdlib.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace cv;

/*
 *
 */
int main(int argc, char** argv) {

    Mat frame, gray;
    string face_cascade = "/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml";
    CascadeClassifier haar(face_cascade);
    VideoCapture cap(0);
    namedWindow("Video", 1);
    vector<Rect> objects;

    while (true) {
        cap >> frame;
        cvtColor(frame, gray, CV_BGR2GRAY);

        haar.detectMultiScale(gray, objects, 1.5, 16, 0, Size(32,32));
        for (vector<Rect>::const_iterator r = objects.begin(); r != objects.end(); r++)
            rectangle(frame, r->tl(), r->br(), Scalar(0, 0, 255));

        imshow("Video", frame);

        if (waitKey(33) >= 0) break;
    }

    return (EXIT_SUCCESS);
}

CascadeClassifier haar(face_cascade);

 - создаем объект классификатора, в качестве параметра для конструктора используется имя файла xml-файла с описанием характеристик каскада

vector<Rect> objects;

 - вектор прямоугольников, описывающих области с обнаруженными объектами

cvtColor(frame, gray, CV_BGR2GRAY);

 - конвертируем цветное изображение в черно-белое

haar.detectMultiScale(gray, objects, 1.5, 16, 0, Size(32,32));

 - ищем объекты на изображении gray и сохраняем объекты в вектор objects
        - 1.5 - scale-параметр
        - 16 - минимальное количество соседей
        - 0 - флаги
        - Size(32, 32) - минимальный размер подобласти, с которой начинается поиск объекта

rectangle(frame, r->tl(), r->br(), Scalar(0, 0, 255));

 - рисуем прямоугольник на изображении frame

1 комментарий:

Djvibegga комментирует...

Зачем создал пост? Выложил бы классификатор обученный...