0

我正在构建一种皮肤检测算法,该算法通过网络摄像头获取恒定的实时馈送,将其转换为二进制图像(基于人脸的肤色),并通过仅显示焦点来过滤掉噪音最大的 blob(使用 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 类型。

有没有人看到我可以让这更快的方法?我最近刚刚听说其他 blob 检测库在实时视频方面做得更好,但我很想看看我的代码中是否有一些我只是忽略的东西。

4

1 回答 1

1

您可以使用 set方法降低相机捕获的分辨率

set(CV_CAP_PROP_FRAME_WIDTH , double width)

set(CV_CAP_PROP_FRAME_HEIGHT , double height)

如果您的默认捕获分辨率太高,这会大大提高检测速度。

于 2013-07-01T16:09:45.943 回答