1

単一の Web カメラを介して、色の異なる複数のオブジェクトを同時に追跡しようとしています。これで、単一のしきい値で単一の色に対してそれを行うことができます。

IplImage* GetThresholdedImage(IplImage* imgHSV)
{       
    IplImage* imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U, 1);
    cvInRangeS(imgHSV, cvScalar(170,160,60), cvScalar(180,2556,256), imgThresh); 
    return imgThresh;
}

さまざまなしきい値を実行するためのヒントを探しています。また、可能であれば、いくつのウィンドウが必要ですか? 色ごとに異なるウィンドウを割り当てる必要がありますか?

4

1 に答える 1

0

これを行う最も簡単な方法は、追跡したい色ごとにしきい値処理された画像を作成することです。しきい値の範囲をハードコーディングする代わりに、関数を変更してパラメーターとして受け取ることができます。これにより、さまざまなオブジェクトに対して関数を再利用できます。

変更された関数は次のようになります。

IplImage* GetThresholdedImage(IplImage* imgHSV, CvScalar lower, CvScalar upper)
{       
    IplImage* imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U, 1);
    cvInRangeS(imgHSV, lower, upper, imgThresh); 
    return imgThresh;
}

そして、オブジェクトごとに異なるしきい値を使用して呼び出します。

IplImage* hsv;    /* Already initialized*/

/* Set thresholds for blue and green objects as an example. */
/*Obviously, set these to be whatever is necessary. */
CvScalar blue_lower = cvScalar(110,60,10);
CvScalar blue_upper = cvScalar(120,256,256);
CvScalar green_lower = cvScalar(40,60,10);
CvScalar green_upper = cvScalar(71,256,256);

/* Get the images thresholded for blue and green. */
IplImage* blue_mask = GetThresholdedImage(hsv, blue_lower, blue_upper);
IplImage* green_mask = GetThresholdedImage(hsv, green_lower, green_upper);
于 2013-07-04T22:13:41.823 に答える