1

編集:オブジェクトが問題から入るフレームの側面のようです。なぜそうなるのかはわかりませんが、右から入ると常に拾われます。上からは、右に近づくまで決して拾われません。

つまり、OpenCV と CamShift を使用してオブジェクトを追跡しようとしています。バックプロジェクション画像を計算して表示しましたが、見栄えがします。その基本的には、黒い背景に白い塊です。ただし、私のプログラムは時々それを拾うだけです。CamShift の検索ウィンドウは画像全体をカバーし、オブジェクトが画面に表示されると縮小し、オブジェクトが離れると再び拡大します。これは約2/3回うまく機能します。3回目で何が悪いのかわかりません。

http://imgur.com/a/rVw2l : 私の言いたいことを示すスクリーンショットのアルバム。緑色の四角形は検索ウィンドウ (trackWindow) で、赤色は CamShift (trackBox) のrotatedRect 出力です。

何か案は?基準で遊んでみましたが、あまり効果がないようでした。

calcBackProject(&image_hue, 1, 0, hist, backproj, &ranges, 1, true );
erode(backproj, backproj, Mat());
dilate(backproj, backproj, Mat());

backproj=backproj*10;
imshow ("", backproj);

cout << "width " << trackWindow.width << "\n";
cout << "height " << trackWindow.height << "\n";    

RotatedRect trackBox = CamShift(backproj, trackWindow, TermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ));

rectangle(image,trackWindow, Scalar(0,255,0),1,8,0);

Point2f vertices[4];
trackBox.points(vertices);
for (int i = 0; i < 4; i++)
{
line(image, vertices[i], vertices[(i+1)%4], Scalar(0,0,255));
}
4

0 に答える 0