细看都是坑(OpenCV中的matchTemplate方法)

来源:互联网 发布:大数据的发展图片 编辑:程序博客网 时间:2024/06/05 15:33

最近利用OpenCV做2幅图像的比较,用的TM_CCORR_NORMED方法,发现对于图像中,有明确目标的情况下,匹配的结果较好,90+%;对于图像中没有明确目标,如基本黑色的情况下,返回值只有40-50%,或更低。可明明2幅黑色的图像也是类似的嘛,好不?只好再翻一下Learning OpenCV 3关于matchTemplate的说明:

1. cv::TM_SQDIFF

计算模板与目标图像的方差,由于是像素值差值的平方的和,所以值越小匹配程度越高;

2. cv::TM_SQDIFF_NORMED

范化的cv::TM_SQDIFF,取值为0-1之间,完美匹配返回值为0;

3. cv::TM_CCORR

使用dot product计算匹配度(不清楚怎么计算dot product,没看过代码),越高匹配度就好;

4. cv::TM_CCORR_NORMED

范化的cv::TM_CCORR,0-1之间,我用的这个;

5. cv::TM_CCOEFF

采用模板与目标图像像素与各自图像的平均值计算dot product,正值越大匹配度越高,负值越大图像的区别越大,但如果图像没有明显的特征(即图像中的像素值与平均值接近)则返回值越接近0;

6. cv::TM_CCOEFF_NORMED

范化的cv::TM_CCOEFF,-1 ~ 1之间。

从上面的几个方法中,6比较符合目前需求:没有明显的特征,但2幅图像还是非常接近的,so,改为方法cv::TM_CCOEFF_NORMED。