#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现模板匹配

大道之行,天下为公。这篇文章主要讲述#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现模板匹配相关的知识,希望能为你提供帮助。
前言利用python实现OpenCV实现边缘检测。废话不多说。
让我们愉快地开始吧~
开发工具Python版本: 3.6.4
相关模块:
cv2模块;
以及一些Python自带的模块。
环境搭建安装Python并添加到环境变量,pip安装需要的相关模块即可。
模板匹配模板匹配,就是在整个图像区域里发现与给定子图像相匹配的小块区域
这里需要一个模板图像(给定的子图像)和一个待检测的图像(原图像)
在待检测图像上,从左向右,从上向下计算模板图像与重叠子图像的匹配度,匹配度越大,两者相同的可能性越大

#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现模板匹配

文章图片

这里主要涉及OpenCV的cv2.matchTemplate()和cv2.minMaxLoc()函数
第一个函数作用是在模板和输入图像之间寻找匹配,获得匹配结果图像
第二个函数的作用则是在给定的矩阵中寻找最大和最小值(包括它们的位置)
其中模板匹配算法有以下六种
# 第一类,利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大# 平方差匹配 method=CV_TM_SQDIFF# 标准平方差匹配 method=CV_TM_SQDIFF_NORMED# 第二类,采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果# 相关匹配 method=CV_TM_CCORR# 标准相关匹配 method=CV_TM_CCORR_NORMED# 第三类,将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列)# 相关系数匹配 method=CV_TM_CCOEFF# 标准相关系数匹配 method=CV_TM_CCOEFF_NORMED

标准化意味着将数值统一到0~1
检索图像看一下两张图像,都为灰度图
import cv2# 读取待检测图像 img = cv2.imread(game.png, 0) # 读取模板图像 temple = cv2.imread(temple.png, 0)# 显示灰度处理后的待检测图像 cv2.namedWindow(sample, 0) cv2.resizeWindow(sample, 400, 600) cv2.imshow(sample, img)# 显示灰度处理后的模板图像 cv2.namedWindow(target, 0) cv2.resizeWindow(target, 400, 600) cv2.imshow(target, temple)

结果展示
#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现模板匹配

文章图片

【#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现模板匹配】第一张为模板图像,第二张为待检测图像
下面使用OpenCV的两个函数,来实现模板匹配
# 获取模板图像的高和宽 th, tw = temple.shape[:2] print(th, tw)# 使用标准相关系数匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性 result = cv2.matchTemplate(img, temple, cv2.TM_CCOEFF_NORMED)# result为匹配结果矩阵 # print(result)# TM_CCOEFF_NORMED方法处理后的结果图像 cv2.namedWindow(match_r, 0) cv2.resizeWindow(match_r, 400, 600) # 显示窗口 cv2.imshow(match_r, result)# 使用函数minMaxLoc,确定匹配结果矩阵的最大值和最小值(val),以及它们的位置(loc) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)# 此处选取最大值的位置,为图像的左上角 tl = max_loc # 获取图像的右下角 br = (tl[0]+tw, tl[1]+th) # 绘制矩形框 cv2.rectangle(img, tl, br, (0, 0, 255), 2)# 设置显示窗口 cv2.namedWindow(match, 0) cv2.resizeWindow(match, 400, 600) # 显示窗口 cv2.imshow(match, img)# 结束 cv2.waitKey(0) cv2.destroyAllWindows()

结果输出
#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现模板匹配

文章图片

第一张图中最白的位置,即代表着最高的匹配
第二张图中,矩形框则代表着匹配到的结果
通过矩形框的位置参数,结合模板图像的大小,便可得到小跳棋中心点位置(底部)

    推荐阅读