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

Posted 逻辑教育

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现模板匹配相关的知识,希望对你有一定的参考价值。

前言

利用Python实现OpenCV实现边缘检测。废话不多说。

让我们愉快地开始吧~

开发工具

Python版本: 3.6.4

相关模块:

cv2模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

模板匹配

模板匹配,就是在整个图像区域里发现与给定子图像相匹配的小块区域

这里需要一个模板图像(给定的子图像)和一个待检测的图像(原图像)

在待检测图像上,从左向右,从上向下计算模板图像与重叠子图像的匹配度,匹配度越大,两者相同的可能性越大

这里主要涉及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)

结果展示

第一张为模板图像,第二张为待检测图像

下面使用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实现模板匹配的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现边缘检测

#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现目标跟踪

#yyds干货盘点#Python实战案例,CV2模块,Python实现抖音字符视频

#yyds干货盘点# Windows下Python-openCV学习-------图像处理基本

#yyds干货盘点#python基础学习系列

#yyds干货盘点# Python Opencv实战之图像阈值和模糊处理,万字实战,收藏起来吧~