0

私は、Web カメラで一定のリアルタイム フィードを取得し、それを (人の顔の肌の色に基づいて) バイナリ イメージに変換し、肌に焦点を当てていることだけを示すことによってノイズをフィルター処理する肌検出アルゴリズムを構築しています。最大のブロブ (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");

CvBlobsLib は IplImage タイプでのみ機能するため、Mat を IplImage に変換します。

これをより速くする方法を誰かが見ていますか? 最近、他のブロブ検出ライブラリの方がリアルタイム ビデオで優れた機能を発揮すると聞きましたが、自分のコードで単純に見落としているものがあるかどうかを知りたいと思います。

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 に答える