Уменьшение задержки при обнаружении больших двоичных объектов в режиме реального времени, двоичная ч / б веб-камера с использованием cvblobslib и opencv(C++)

Я создаю алгоритм обнаружения кожи, который принимает постоянную ленту в реальном времени с веб-камерой, преобразует ее в двоичное изображение (на основе цвета кожи лица человека) и отфильтровывает шум, показывая только фокусировку на самые большие капли (используя CvBlobsLib). Вывод моего кода, однако, показывает большую задержку, и я не уверен, что изменить, чтобы сделать это быстрее.

Вот (важная часть) мой код:

Mat frame;
IplImage ipl, *res = new IplImage;
CBlobResult blobs;
CBlob *currentBlob;
cvNamedWindow("output");

for(;;){

    cap >> frame; //get a new frame from camera
    cvtColor(frame, lab, CV_BGR2Lab);//frame now in L*a*b*
    inRange(lab, BW_MIN, BW_MAX, bw);//frame now only shows "skin values"...BW_MIN/BW_MAX determined earlier
    ipl = bw; //IplImage header

    blobs = CBlobResult(&ipl, NULL, 0);
    blobs.Filter(blobs, B_EXCLUDE, CBlobGetArea(), B_LESS, 10000);
    res = cvCreateImage(cvGetSize(&ipl), IPL_DEPTH_8U, 3);
    cvMerge(&ipl, &ipl, &ipl, NULL, res);
    cvShowImage("output", res);
    if(waitKey(5) >= 0) break;

    }

cvDestroyWindow("output");

Я конвертирую Mat в IplImage, потому что CvBlobsLib работает только с типом IplImage.

Кто-нибудь видит способ, которым я мог бы сделать это быстрее? Я только недавно слышал, что другие библиотеки обнаружения блобов лучше справляются с видео в реальном времени, но мне было бы интересно узнать, есть ли что-то, что я просто пропускаю в своем коде.

1 ответ

Решение

Вы можете уменьшить разрешение захвата камеры, используя заданный метод

set(CV_CAP_PROP_FRAME_WIDTH , double width)

а также

set(CV_CAP_PROP_FRAME_HEIGHT , double height)

Если разрешение захвата по умолчанию слишком высокое, это может значительно увеличить скорость обнаружения.

Другие вопросы по тегам