一、模板匹配函数中文说明

安装cv2:

 pip install opencv-python

1、目标匹配函数:

cv2.matchTemplate(image, templ, method, result=None, mask=None)

image:待搜索图像
templ:模板图像
result:匹配结果
method:计算匹配程度的方法

2、匹配方法

关于匹配方法,使用不同的方法产生的结果的意义可能不太一样,有些返回的值越大表示匹配程度越好,而有些方法返回的值越小表示匹配程度越好。

关于参数 method:
CV_TM_SQDIFF 平方差匹配法:该方法采用平方差来进行匹配;最好的匹配值为0;匹配越差,匹配值越大。
CV_TM_CCORR 相关匹配法:该方法采用乘法操作;数值越大表明匹配程度越好。
CV_TM_CCOEFF 相关系数匹配法:1表示完美的匹配;-1表示最差的匹配。
CV_TM_SQDIFF_NORMED 归一化平方差匹配法

CV_TM_CCORR_NORMED 归一化相关匹配法

CV_TM_CCOEFF_NORMED 归一化相关系数匹配法

3、通过cvMinMaxLoc获取最后的最佳匹配结果

二、python_opencv中cv2.minMaxLoc()函数的使用

cv2.minMaxLoc(src, mask=None)

src是一个矩阵。

函数功能:假设有一个矩阵a,现在需要求这个矩阵的最小值,最大值,并得到最大值,最小值的索引。咋一看感觉很复杂,但使用这个cv2.minMaxLoc()函数就可全部解决。函数返回的四个值就是上述所要得到的。

具体看个例子:

import numpy as np
import cv2
a=np.array([[2,3,4,5],[5,67,8,9],[1,3,4,5]])
print(a)
min_val,max_val,min_indx,max_indx=cv2.minMaxLoc(a)print(min_val,max_val,min_indx,max_indx)

输出结果:
[[ 2 3 4 5]
[ 5 67 8 9]
[ 1 3 4 5]]
1.0 67.0 (0, 2) (1, 1)
说明这个矩阵a的最小值为1.0,索引为(0,2),最大值为67.0索引为(1,1)

三、应用到图片匹配中,获取缺口信息:

1、详细版:
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('img_all.jpg', 0)
img2 = img.copy()
template = cv2.imread('img_splice.png', 0)# cv2.imshow('messi', img)
# cv2.imshow('face', template)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
w, h = template.shape[::-1]
# All the 6 methods for comparison in a list
# methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR',
#            'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']meth = 'cv2.TM_CCOEFF'
img = img2.copy()
'''
exec可以用来执行储存在字符串货文件中的python语句
例如可以在运行时生成一个包含python代码的字符串
然后使用exec语句执行这些语句
eval语句用来计算存储在字符串中的有效python表达式
'''
method = eval(meth)
# 匹配应用
res = cv2.matchTemplate(img, template, method)
mn_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# print('mn_val',mn_val)
# print('max_val',max_val)
# print('min_loc',min_loc)
# print('max_loc',max_loc)
# 使用不同的方法,对结果的解释不同# 方法判断
# if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
#     top_left = min_loc
# else:
#     top_left = max_loc
top_left = max_loc
print('偏移像素',top_left[0])bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img, top_left, bottom_right, 255, 2)plt.subplot(121), plt.imshow(res, cmap='gray')
plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(img, cmap='gray')
plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
plt.suptitle('method: ' + meth)
plt.show()

2、我破解验证码需要的简化版

import cv2
img = cv2.imread('img_all.jpg', 0)
img2 = img.copy()
template = cv2.imread('img_splice.png', 0)
w, h = template.shape[::-1]
# methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR','cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']
meth = 'cv2.TM_CCOEFF'
img = img2.copy()
'''
exec可以用来执行储存在字符串货文件中的python语句
例如可以在运行时生成一个包含python代码的字符串
然后使用exec语句执行这些语句
eval语句用来计算存储在字符串中的有效python表达式
'''
method = eval(meth)
# 匹配应用
res = cv2.matchTemplate(img, template, method)
mn_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = max_loc[0]
print('偏移像素',top_left)

参考博客:
https://blog.csdn.net/jacky_ponder/article/details/69396909
https://blog.csdn.net/qq_29023939/article/details/81023062

cv2.matchTemplate模板匹配和cv2.minMaxLoc()函数相关推荐

  1. 13. 模板匹配-cv2.matchTemplate()、cv2.minMaxLoc()

    1. 什么是模板匹配 模板匹配,就是在整个图像区域发现与给定子图像匹配的小块区域,需要模板图像T和待检测图像-源图像S.        工作方法:在待检测的图像上,从左到右,从上倒下计算模板图像与重叠 ...

  2. 基于opencv的图片模板匹配及其简单应用

    opencv的图片模板匹配及其简单应用 我的个人博客 基础知识 基于opencv的图片模板匹配 注: python及其相关包的安装不在讨论范围内 opencv提供了图片模板匹配的方法, cv2.mat ...

  3. OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍

    导读 模板匹配是用来在一副大图中搜寻查找模版图像位置的方法.绘制矩形是用来将模版图像的匹配结果展示出来的方法. 模板匹配实现简单(2~3行代码),计算效率高,不需要执行阈值化.边缘检测等操作来生成二值 ...

  4. opencv学习笔记十八:模板匹配(cv2.matchTemplate、cv2.minMaxLoc)

    1.目标匹配函数:cv2.matchTemplate() res=cv2.matchTemplate(image, templ, method, result=None, mask=None) ima ...

  5. python cv2 matchtemplate_OpenCV-Python系列十:模板匹配

    模板匹配应用的场景非常多,OCR(字符识别),目标检测.定位等等.OpenCV中,你可以使用cv2.matchTemplate()来完成.对于其中的计算原理,可参考如下博客: cv2.matchTem ...

  6. OpenCV-Python教程:模板匹配(matchTemplate)

    原文链接:http://www.juzicode.com/opencv-python-matchtemplate 返回Opencv-Python教程 模板匹配可以实现在源图像中查找特征图像,特征图像一 ...

  7. OpenCV(二十)模板匹配

    目录 一.基础理论 1.作用与过程 2.原理 3.函数matchTemplate 二.代码 三.效果 参考资料 一.基础理论 1.作用与过程 所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域, ...

  8. opencv进阶学习笔记8:模板匹配

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 模板匹配原理 模板匹配(Te ...

  9. OpenCV与图像处理学习十六——模板匹配

    OpenCV与图像处理学习十六--模板匹配 一.模板匹配介绍 二.代码应用 一.模板匹配介绍 模板匹配是一种最原始.最基本的模式识别方法,研究某一特定目标的图像位于图像的什么地方,进而对图像进行定位. ...

最新文章

  1. c++11 之模板定义别名(using)
  2. java安装_使用Java 9模块化来发布零依赖本机应用程序
  3. 添加一个hello wrold系统调用到内核
  4. mxnet基础到提高(35)-ndarray
  5. Linux必懂知识大总结(下)
  6. mysql 工时统计_有如下数据,要统计1月3号工时不足8小时的员工姓名及总工时,该sql语句该怎么写(用的mysql哈)...
  7. dg修改归档目录 oracle_DG环境下ORACLE自动回收归档空间
  8. 2014年国际IT外包10大事件
  9. Arcgis javascript那些事儿(十四)——连接oracle
  10. 在搭建tesseract-OCR环境中遇到问题和反省
  11. 给初学日语者的几点建议——词汇篇
  12. 全票通过!数据集成平台 SeaTunnel 成功进入 Apache 孵化器!
  13. 什么是晶振?晶振在电路中的作用是什么?
  14. MAC系统查看端口,并关闭端口占用
  15. 班级日常工作管理系统
  16. 阿文的《Java从入门到精通(第二版)》学习日记DAY1
  17. Xen - Networking
  18. vs2013 调用webapi出错,请求的资源不支持 http 方法“GET”
  19. 基于http-flv的抖音直播端到端延迟优化实践
  20. 深度学习准备之安装双系统

热门文章

  1. windows.edb文件过大,导致c盘空间极小问题
  2. Google新版第三方登录(Javascript SDK)
  3. BP神经网络逼近函数项目(含matlab代码)
  4. SQL中存储过程和函数的标准写法
  5. IaaS PaaS SaaS云服务三种应用模式
  6. 特定于患者的计算流体动力学在冠状动脉和心脏内血流模拟中的应用:挑战和机遇
  7. Thinkpad 系列电脑,装win10无限卡死在登录界面 解决方案及bug report!
  8. 通过TWRP清除手机锁屏密码
  9. maven配置本地仓库、maven配置阿里中央仓库
  10. fedora mysql 开机启动服务_linux -- 启动时启动服务或者执行命令