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_SQDIFF_NORMED 而不是 CV_TM_CCORR_NORMED,完美匹配对应的值为零而不是一,因此您必须检查 min_val 而不是 max_val

于 2013-04-21T21:14:47.377 回答