c++ - 使用 CV_TM_CCORR_NORMED 进行 openCV 模板匹配

标签 c++ opencv template-matching

我有这个代码

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

关于c++ - 使用 CV_TM_CCORR_NORMED 进行 openCV 模板匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16130778/

相关文章:

c++ - 是否可以在 C++ 中创建对象数组队列?

c++ - lua_newstate 与 lua_newthread

c++ - 使用opencv GPU旋转图像

image - JavaCV IplImage.createFrom卡在适当位置

Java OPENCV 模板匹配给出错误的坐标?

c++ - 有记录程序执行路径的工具吗?

python - 有没有一种精确的方法来测量Python(3.7)中特定字体的文本大小?

c++ - 如何获得物体的距离以及如何正确使用相机校准矩阵?

opencv - 建议模板匹配算法

c++ - 如何有效地存储矩形网格?