opencv 模板匹配 掩膜 matchtemplate with mask

opencv的模板匹配功能是基于图片的匹配,必须横平竖直用这个长方形矩阵Mat去比较,而不能指定Mat图像中特定的不规则区域进行比较,也就是不能基于形状进行匹配。opencv的模板匹配功能是非常弱的。经过本人测试,目前最新的cv4.5.3版本仍旧不能完美实现带掩膜的形状模板匹配。

opencv的matchTemplate函数位于头文件imgproc内,用np++打开可以看到,2020年之前的版本,描述里写着只支持两种匹配method,#TM_SQDIFF and #TM_CCORR_NORMED, 也就是枚举的0和3, 但经过本人测试,该两种类型只是能加mask运行不报错而已,还必须在彩色图像下,而且并不能得到想要的结果。
19年12月版本的opencv源码注释

新版本2020年6月以后,包括2021年10月份最新下载的opencv4.5.3,模板匹配函数中每个method都已经支持mask,至少根据官方说明是这样的。但是经过本人亲自测试,cv4.5.3在其他method下,也仅仅是加mask不报错,但是运行出来的结果仍然是不能用的。
2020年6月以后的opencv中已经完善了mask功能

至于原因,是cv本身计算相关性的时候矩阵计算的限制导致的。详情见参考文献第一篇。

如果想实现基于形状而不是灰度,namely, 灰度不变性,的匹配,需要用其他商业视觉库,或者使用其他特征配准,比如canny,sift等。

相关参考文献:
stackoverflow:
2013年提出的掩膜模板匹配帖子,可能是该问题全球第一篇帖子
其他相关
源码探究

opencv论坛:
2013年,未解决
2018年,同样问题,只有0,3能run,效果差,未解决
2020年,问题关闭,其实只是run起来,效果差

另外:
opencv模板匹配源码

你可能感兴趣的:(opencv,opencv,python)