[英]Reducing lag during blob detection of real-time, binary b/w webcam feed using cvblobslib and opencv(c++)
我建立一个皮肤检测算法,需要恒定的,实时的饲料有一个摄像头,将其转换为二进制图像(基于人的脸部的肤色),并只
显示
集中在过滤掉噪音最大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类型。
有人看到我可以更快地做到这一点的方法吗? 我最近听说其他斑点检测库在实时视频方面做得更好,但是我很想看看我的代码中是否有某些东西被我忽略了。
您可以使用设置方法降低相机拍摄的分辨率
set(CV_CAP_PROP_FRAME_WIDTH , double width)
和
set(CV_CAP_PROP_FRAME_HEIGHT , double height)
如果您的默认捕获分辨率太高,则可以大大提高检测速度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.