使用CV_TM_CCORR_NORMED的openCV模板匹配 [英] openCV template matching using CV_TM_CCORR_NORMED

查看:994
本文介绍了使用CV_TM_CCORR_NORMED的openCV模板匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个代码

cvMatchTemplate(image2, templat2, result, CV_TM_CCORR_NORMED);

如果存在匹配项,如何使程序执行以下行:

How do I make the program execute the following lines if there is a match:

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:

You need to execute both cvMatchTemplate and cvMinMaxLoc together:

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来确定是否有匹配项.

Then you can determine whether you have a match or not by checking max_val.

如果max_val为1,则在搜索图片中max_loc的位置上逐像素完全匹配. max_val越低,则最佳匹配中的错误就越多.

if max_val is 1, you have an exact match, pixel-for-pixel, at the position max_loc in your search picture. The lower max_val is, the more errors are in the best match.

尝试一些测试用例,以确定您的阈值应该是什么.

Try it out for some test cases to determine what your threshold should be.

请注意,如果您使用CV_TM_SQDIFF_NORMED而不是CV_TM_CCORR_NORMED,则完美匹配对应的是零值而不是1,因此您将必须检查min_val而不是max_val

Be aware that if you use CV_TM_SQDIFF_NORMED instead of CV_TM_CCORR_NORMED, a perfect match corresponds to a value of zero instead of one, so you will have to check for min_val instead of max_val

这篇关于使用CV_TM_CCORR_NORMED的openCV模板匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆