openCV模板匹配使用cv_tm_ccorr_normmed

openCV template matching using CV_TM_CCORR_NORMED

本文关键字:cv tm ccorr normmed openCV      更新时间:2023-10-16

我有这样的代码

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);

谢谢。

您需要同时执行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_SQDIFF_NORMED而不是CV_TM_CCORR_NORMED,则完全匹配对应的值为0而不是1,因此必须检查min_val而不是max_val