c++ opencv模板匹配后是否需要归一化
matchTemplate执行后是否需要归一化处理取决于所使用的匹配方法。
OpenCV的matchTemplate函数提供了多种匹配方法,每种方法对结果的处理方式不同:
-
平方差匹配(cv2.TM_SQDIFF):此方法通过计算模板与图像区域之间的平方差来进行匹配。平方差越小,匹配程度越高。最佳匹配是在结果矩阵中的最小值处找到的,通常不需要归一化处理12。
-
归一化平方差匹配(cv2.TM_SQDIFF_NORMED):与平方差匹配类似,但结果会被归一化到0(完全不匹配)到1(完美匹配)的范围内。这使得比较不同大小的图像或模板时更为方便。最佳匹配同样是在结果矩阵中的最小值处找到的12。
-
相关匹配(cv2.TM_CCORR):此方法通过计算模板与图像区域之间的互相关来进行匹配。互相关值越大,匹配程度越高。最佳匹配是在结果矩阵中的最大值处找到的12。
-
归一化相关匹配(cv2.TM_CCORR_NORMED):与相关匹配类似,但结果会被归一化。归一化后的值在-1(完全不相关)到1(完全相关)之间。这使得比较更加灵活,特别是当模板和图像之间的亮度差异很大时12。
-
系数匹配(cv2.TM_CCOEFF):此方法通过计算模板与图像区域之间的相关系数来进行匹配。相关系数是归一化的协方差,其值在-1(负相关)到1(正相关)之间。值越接近1,匹配程度越高。最佳匹配是在结果矩阵中的最大值处找到的12。
-
归一化系数匹配(cv2.TM_CCOEFF_NORMED):与系数匹配类似,但结果会被归一化。归一化后的值在-1(完全不相关)到1(完全相关)之间12。
归一化的作用和效果
归一化处理可以使结果在一定的范围内,便于比较和评估不同图像或模板之间的相似度
不做归一化://normalize(dst2, dst2, 0, 1, NORM_MINMAX, -1, Mat()); //归一化
matchTemplate(src, src_template, dst2, TM_SQDIFF_NORMED);
minMaxLoc(dst2, &min, &max, &minPos, &maxPos, Mat());
归一化平方差匹配效果较好,看min值,越接近0越好,供参考