龙空技术网

opencv(2)--模版匹配

chencalf 157

前言:

此刻看官们对“opencv模版匹配方法”大致比较注意,大家都需要学习一些“opencv模版匹配方法”的相关内容。那么小编也在网络上收集了一些对于“opencv模版匹配方法””的相关知识,希望你们能喜欢,朋友们一起来了解一下吧!

0、参考

(1)不错:

1、概念

模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术。模板匹配不是基于直方图的,而是通过在输入图像上滑动图像块(模板)同时对比相似度,来对模板和输入图像进行匹配的一种方法。主要应用场合:

(1)目标查找定位(2)运动物体跟踪2matchTemplate函数2.1函数定义

(1)函数定义如下

	cv.matchTemplate(	image, templ, method[, result[, mask]]	) ->	result

(2)官方定义如下

(3)参数说明

image:待搜索图像(大图)templ:搜索模板,需和原图一样数据类型且尺寸大小不能大于源图像reuslt:比较结果的映射图像,其必须为单通道的,32位浮点型图像。如果原图(待搜索图像)尺寸为W*H,而templ的尺寸为w*h,则result的尺寸一定是(W-w+1)*(H-h+1)。2.2匹配方法

上述函数中(method)的匹配方法有有如下六种

1 TM_SQDIFF --- 平方差匹配法(最好匹配0)2 TM_SQDIFF_NORMED --- 归一化平方差匹配法(最好匹配0)3 TM_CCORR --- 相关匹配法(最坏匹配0)4 TM_CCORR_NORMED ---归一化相关匹配法(最坏匹配0)5 TM_CCOEFF --- 系数匹配法(最好匹配1)6 TM_CCOEFF_NORMED --- 归一化系数匹配法(最好匹配1)

官方的定义如下

2.2.1 TM_SQDIFF

平方差匹配 method=TM_SQDIFF:最好匹配为0,匹配越差,匹配值越大。python写法为:cv.TM_SQDIFF

2.2.2 TM_SQDIFF_NORMED

标准平方差匹配 method=TM_SQDIFF_NORMED。Python写法为: cv.TM_SQDIFF_NORMED

2.2.3 TM_CCORR

相关匹配 method=TM_CCORRPython写法为: cv.TM_CCORR

2.2.4 TM_CCORR_NORMED

标准相关匹配 method=TM_CCORR_NORMEDPython写法为: cv.TM_CCORR_NORMED

2.2.5 TM_CCOEFF

系数匹配 method=TM_CCOEFFPython写法为: cv.TM_CCOEFF

2.2.6 TM_CCOEFF_NORMED

归一化系数匹配method=TM_CCOEFF_NORMEDPython写法为: cv.TM_CCOEFF_NORMED

3.normalize函数3.1作用

该函数的作用是进行矩阵归一化。

3.2函数说明

(1)函数

cv.normalize(	src, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]]	) ->	dst

(2)官方说明

(3)参数说明

src:输入源图像,Mat类型dst:输出结果图像,需要和原图一样的尺寸和类型alpha:归一化后的最小值,默认为1beta:归一化后的最大值,默认为0norm_type:归一化类型,可选:NORM_INF, NORM_L1, NORM_L2(默认)等dtype:默认值为-1,此参数为负值时,输出矩阵和src有同样的类型mask:可选的掩码操作4.minMaxLoc()函数4.1作用

minMaxLoc()函数的作用是在数组中找到全局最小值和最大值

4.2函数说明

(1)定义

cv.minMaxLoc(	src[, mask]	) ->	minVal, maxVal, minLoc, maxLoc

(2)官方定义

(3)参数说明

src:输入源图像,单通道图像minVal:返回最小值的指针,若无需返回,则置为0maxVal:返回最大值的指针,若无需返回,则置为0minLoc:返回最小位置的指针,若无需返回,则置为0maxLoc:返回最大位置的指针,若无需返回,则置为0mask:可选的掩码操作5.模版匹配的测试代码

(1)测试代码

import cv2import numpy as npif __name__ == '__main__':    # 读取图像和模板    img = cv2.imread('Src2.jpg',0)    template = cv2.imread('template2.jpg',0)    # template = cv2.imread('template1_2.jpg',0)    # template = cv2.imread('template1.jpg',0)    w, h = template.shape[::-1]    # 模板匹配    result = cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)    #归一化 到0-1范围    result = cv2.normalize(result, None, 0, 1.0, cv2.NORM_MINMAX, dtype=cv2.CV_32F)    # 找到最佳匹配    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)    top_left = max_loc    bottom_right = (top_left[0] + w, top_left[1] + h)    # 在原图中绘制矩形框    cv2.rectangle(img,top_left, bottom_right, 255, 2)    # 显示结果    cv2.imshow('Matched image',img)    cv2.waitKey(0)    cv2.destroyAllWindows()

(2)测试结果

标签: #opencv模版匹配方法