簡體   English   中英

使用cvblobslib和opencv(c ++)減少實時二進制黑白網絡攝像頭訂閱源的斑點檢測期間的延遲

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM