我有这段代码
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);
谢谢。
答案 0 :(得分: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,则完美匹配对应的值为零而不是1,因此您必须检查min_val而不是max_val