2

私はこのコードを持っています

cvMatchTemplate(image2, templat2, result, CV_TM_CCORR_NORMED);

一致する場合、プログラムに次の行を実行させるにはどうすればよいですか。

double min_val, max_val;
CvPoint min_loc, max_loc;
cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc);

cvRectangle(image3, max_loc, cvPoint(max_loc.x+templat->width, 
max_loc.y+templat->height), cvScalar(0,1,1), 1);

ありがとうございました。

4

1 に答える 1

4

cvMatchTemplate と cvMinMaxLoc の両方を一緒に実行する必要があります。

cvMatchTemplate(image2, templat2, result, CV_TM_CCORR_NORMED);

double min_val, max_val;
CvPoint min_loc, max_loc;
cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc);

次に、max_val を確認することで一致するかどうかを判断できます。

max_val が 1 の場合、検索画像の max_loc の位置にピクセル単位で完全に一致します。max_val が低いほど、ベスト マッチのエラーが多くなります。

いくつかのテスト ケースで試して、しきい値を決定してください。

CV_TM_CCORR_NORMED の代わりに CV_TM_SQDIFF_NORMED を使用する場合、完全一致は 1 ではなく 0 の値に対応するため、max_val ではなく min_val を確認する必要があることに注意してください。

于 2013-04-21T21:14:47.377 に答える