今天学习模板匹配
模板图片

目标图像

import cv2
import matplotlib.pyplot as plt# 模板匹配的原理:
# 一个模板图像在目标图像上机芯从左到右从上到下进行滑动,每滑动一个位置就计算匹配度(均方差或者是相关系数等)
# 遍历完目标图像后,求出最匹配的未知区域来。# 展示图像,封装成函数
def cv_show_image(name, img):cv2.imshow(name, img)cv2.waitKey(0)  # 等待时间,单位是毫秒,0代表任意键终止cv2.destroyAllWindows()# 读取模板
template = cv2.imread('images/template.jpg')  # 转成灰度图
print('template图像维度是:', template.shape)
h, w, c = template.shape
print(h)
print(w)
cv_show_image('template', template)# 读取目标图像
dst_img = cv2.imread('images/saoge2.jpg')  # 转成灰度图
print('目标图像维度是:', dst_img.shape)
cv_show_image('dst_img', dst_img)# 匹配度的度量方法
methords = ['cv2.TM_SQDIFF',  # 计算每个像素点的均方差,值越小越相关'cv2.TM_CCORR',  # 计算相关性,值越大越相关'cv2.TM_CCOEFF',  # 计算相关性系数,值越大越相关'cv2.TM_SQDIFF_NORMED',  # 计算每个像素点的均方差,值越小越相关,带有归一化'cv2.TM_CCORR_NORMED',  # 计算相关性,值越大越相关,带有归一化'cv2.TM_CCOEFF_NORMED'  # 计算相关性系数,值越大越相关,带有归一化]colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (0, 255, 255), (255, 0, 255)]
thickness = [12, 10, 8, 6, 4, 2]img_result = dst_img.copy()
for i in range(len(methords)):img_tmp = dst_img.copy()  # 临时展示当前的框框methord = eval(methords[i])  # 拿到具体的模板匹配方法print('current methord is: {}'.format(methords[i]))# 实际进行模板匹配res = cv2.matchTemplate(dst_img, template, methord)  # 传入目标图像、模板图像、匹配度量方法print(res.shape)  # 得到的是 (dst_img.H - template.H + 1, dst_img.W - template.W + 1)的维度数据print(type(res))  # <class 'numpy.ndarray'>print(res.dtype)  # 每个元素的类型是 float32# 解析结果,分别获得匹配过程中度量值的最大最小值,以及其分布像素点的位置,根据methord不同,去取适当的值min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)if methord in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:top_left = min_locelse:top_left = max_locbottom_right = (top_left[0] + w, top_left[1] + h)print('模板匹配到的位置信息是', top_left, bottom_right)# 在图像上画出矩形表示这个匹配的位置cv2.rectangle(img_result, top_left, bottom_right, colors[i], thickness[i])cv2.rectangle(img_tmp, top_left, bottom_right, colors[i], thickness[i])plt.subplot(1, 2, 1), plt.imshow(res, 'gray')  # 画出各个像素点(代表一个(h, w)的区域)的匹配度plt.xticks([]), plt.yticks([])  # 隐藏坐标轴plt.subplot(1, 2, 2), plt.imshow(img_tmp, 'gray')  # 在原始图像上画出匹配的位置plt.xticks([]), plt.yticks([])  # 隐藏坐标轴plt.title(methords[i])plt.show()# 最后把所有的框框都核在一起
cv_show_image('img_result', img_result)

效果如下:
‘cv2.TM_SQDIFF’, # 计算每个像素点的均方差,值越小越相关

‘cv2.TM_CCORR’, # 计算相关性,值越大越相关

‘cv2.TM_CCOEFF’, # 计算相关性系数,值越大越相关

‘cv2.TM_SQDIFF_NORMED’, # 计算每个像素点的均方差,值越小越相关,带有归一化

‘cv2.TM_CCORR_NORMED’, # 计算相关性,值越大越相关,带有归一化

‘cv2.TM_CCOEFF_NORMED’ # 计算相关性系数,值越大越相关,带有归一化

最后汇总的结果就是

【opencv学习】【模板匹配】相关推荐

  1. 基于VS与OpenCV的模板匹配学习(4):手写OpenCV matchTemplate()

    基于VS与OpenCV的模板匹配学习(4):手写OpenCV matchTemplate() 文章目录 基于VS与OpenCV的模板匹配学习(4):手写OpenCV matchTemplate() 前 ...

  2. Opencv java模板匹配-角点检测(11)

    函数 在opencv中有模板匹配的方法, Imgproc.matchTemplate(src, template, result, Imgproc.TM_CCOEFF); 这个方法输入的参数分别是: ...

  3. Python+OpenCV:模板匹配(Template Matching)

    Python+OpenCV:模板匹配(Template Matching) Template Matching with Single Objects ######################## ...

  4. OpenCV—python 模板匹配与图像特征匹配

    文章目录 一.理论介绍与算法 二.算法代码 单目标匹配 多目标匹配 三 多尺度模板匹配 一.理论介绍与算法 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个 ...

  5. OpenCV:模板匹配

    小程序「跳一跳」的自动化. 主要涉及到了OpenCV的模板匹配和边缘检测技术,以及Android开发调试工具ADB. 如果放在一起说,感觉内容有些多. 所以,分三期来讲,也能多了解一些东西. 首先介绍 ...

  6. Python+Opencv实现模板匹配

    目录 一.模板匹配简介 二.传统模板匹配算法不足之处 三.多尺度模板匹配实现步骤 四.多尺度模板匹配实现代码 五.多尺度模板匹配效果展示和分析 六.思维扩展 参考资料 注意事项 一.模板匹配简介    ...

  7. 基于opencv的模板匹配详解

    1.什么是模板匹配 在OpenCV教程中这样解释模板匹配: 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术.这里说的模板是我们已知的小图像,模板匹配就是在一副大图像中搜寻目标. ...

  8. opencv 多角度模板匹配

    总结一下实现多角度模板匹配踩的坑 一 .多角度匹配涉及到要使用mask,首先opencv matchTemplateMask自带的源码如下: static void matchTemplateMask ...

  9. Opencv(六)模板匹配、轮廓检测、轮廓周围绘制矩形框和圆形框

    模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域. 所以模板匹配首先需要一个模板图像T(给定的子图像) 另外需要一个待检测的图像-源图像S 工作方法,在带检测图像上,从左到右,从 ...

  10. [图像识别]8.OpenCV的模板匹配和霍夫检测

    回顾,上节课你学了什么?  Sobel_x_or_y=cv.Sobel(img,ddepth,dx,dy,dst,ksize,scale,delta,borderType) 常用 Sobel_x_or ...

最新文章

  1. kafka教程_2018年机器学习趋势与Apache Kafka生态系统结合
  2. final 修饰方法参数
  3. GDI+ 学习记录(28): 图像颜色的数据格式 - PixelFormat
  4. 关于html语义化 以下哪个说法是正确呢,前端面试题2019年网易工程师面试题及答案解析...
  5. 3DShader之移位贴图(Displacement Mapping)
  6. 热加载beetl模板
  7. python可以取代excel吗_10条Python命令全面取代Excel,妈妈再也不用担心我变成黑眼圈大表哥啦...
  8. Vector Math for 3D Computer Graphics (Bradley Kjell 著)
  9. Python必不可少的小技巧,一行代码减少一半内存占用!
  10. 降水小波分析matlab程序,小波分析MATLAB程序
  11. 搭建个人云盘保姆级教程
  12. Turtle 模块基础详解-画直线
  13. VS6 sp6补丁下载 [防VC6卡死]
  14. ThreadPoolExecutor的四种抛弃策略
  15. safari保存视频_如何使用Safari的“阅读列表”保存文章供以后使用
  16. VICTS(可变倾角连续横向枝节)天线的封闭表达式
  17. Java设置与读取Cookie属性 央邦0首付,低押金先就业后付款
  18. 洛克人java下载_洛克人威利博士之谜
  19. 关于2020 研究生网络复试准备 电子信息类 集成电路类
  20. 解决SQLServer2008 Express远程连接出错的问题[Error: 1326错误]

热门文章

  1. liunx系统优化之 TCP sysctl
  2. 软件工程----8面向对象设计
  3. C语言及程序设计提高例程-10 调试技术:进入函数内部去
  4. tomcat开启cgi
  5. Revit二次开发之“为Ribbon设置快捷键”
  6. Unicode汉字编码
  7. ThreadLocal原理机制
  8. 常用正则验证(邮箱、手机号、密码)
  9. docker之阿里云centos 7.x 启动容器报错处理办法
  10. leetcode 旋转图像