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

cv2.matchTemplate(img, templ, method)

tmepl:模板图像

method:官方提供了三种方法cv2.TM_CCOEFF_NORMED, cv2.TM_CCORR_NORMED, cv2.TM_SQDIFF_NORMED,其中第三种方法值越小,表示匹配概率越大,其余的为值越大匹配概率越大,这里列出的三种是会进行归一化,这方便你设定阈值来进行卡控;

注意:该函数返回的是由匹配程度填充的灰度图像

官方文档:https://docs.opencv.org/3.0-beta/modules/imgproc/doc/object_detection.html?highlight=cv2.matchtemplate#void%20matchTemplate(InputArray%20image,%20InputArray%20templ,%20OutputArray%20result,%20int%20method)

选取模板

利用上述函数对图像进行模板匹配:

钢管模板匹配

import cv2

import numpy as np

# 剔除数据集中相邻太近的点,模板匹配设定的阈值会在目标附近产生大量的重复结果

# 需要设计方法进行剔除

def split_min_dist_dots(dot, dot_set, min_dist = 20):

if dot_set:

append_flag = True

for dt in dot_set:

dist = abs(dot[0] - dt[0]) + abs(dot[1] - dt[1])

if dist < min_dist:

append_flag = False

if append_flag:

dot_set.append(dot)

else:

dot_set.append(dot)

return dot_set

img = cv2.imread('steels.png', -1)

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

gaussian_img = cv2.GaussianBlur(gray_img,(3, 3),0)

template_img = cv2.imread('steel_temp.png', 0)

height, width = template_img.shape[:2]

res = cv2.matchTemplate(gaussian_img, template_img, cv2.TM_CCOEFF_NORMED)

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

threshold_template = 0.6

locs = np.where(res >= threshold_template)

# 最终的匹配结果

dots_set = []

# zip(*)操作,参考https://www.cnblogs.com/quietwalk/p/7997705.html

# locs[::-1]则是将序列顺序颠倒,由于[row, col]对绘制矩形需要区分

for loc in (zip(*locs[::-1])):

dots_set = split_min_dist_dots(loc, dots_set)

for dot in dots_set:

cv2.rectangle(img, dot, (dot[0] + width, dot[1] + height), (255, 25, 25), 1)

cv2.putText(img, 'pipe', dot, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (25, 25, 255), 2)

cv2.putText(img, 'Pipe Count:%s'%len(dots_set), (0, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 25, 255), 2)

cv2.imshow('template_steel', img)

cv2.waitKey(0)

cv2.destroyAllWindows()

这是一个关于模板匹配很简单的示例,如果你想利用这种方法应用到你的项目,需要关注以下几点:

增加模板库,单单一张模板图往往在应用中捉襟见肘;

模板匹配在目标附近会产生大量高于设定阈值的结果,你需要设计更好的剔除邻近干扰方案;

对不同亮度、角度进行适配和测试

当然,你完全也可以采用深度学习中的目标检测方案,后面会涉及到,加个关注

python cv2 matchtemplate_OpenCV-Python系列十:模板匹配相关推荐

  1. python中括号配对检测_使用模板匹配在Python上进行对象检测!(附代码)

    了解如何在没有机器学习或任何框架的情况下在Python上进行对象检测 每当我们听说" 对象检测 "时,我们就会想到机器学习以及不同的框架.但是我们实际上可以在不使用机器学习或任何其 ...

  2. python opencv数字识别_基于模板匹配的手写数字识别(python+opencv)

    智能计算课第一周的实验是做基于模板匹配的手写数字识别,光听见就很感兴趣,于是决定认真做做这个实验,本实验基于python3+opencv的python版本,所用到的知识都比较简单,基本上边学边做,技术 ...

  3. 【python版CV】图像轮廓模板匹配

    文章目录 1.图像轮廓 1.1 findContours函数: 1.2 获取轮廓信息(可能会报错原因) 1.3 绘制轮廓: 1.4 轮廓特征: 1.5 轮廓近似: 1.6 边界矩形 2.模板匹配 3. ...

  4. OpenCV系列之模板匹配 | 三十一

    目标 在本章中,您将学习 使用模板匹配在图像中查找对象 你将看到以下功能:cv.matchTemplate(),cv.minMaxLoc() 理论 模板匹配是一种用于在较大图像中搜索和查找模板图像位置 ...

  5. 【OpenCV + Python】模板匹配

    模板匹配是用来在一副大图中搜寻查找模版图像位置的方法.OpenCV 为我们提供了函数:cv2.matchTemplate().和2D 卷积一样,它也是用模板图像在输入图像(大图)上滑动,并在每一个位置 ...

  6. Python+Opencv实现图像匹配——模板匹配

    1.原理 简单来说,模板匹配就是拿一个模板(图片)在目标图片上依次滑动,每次计算模板与模板下方的子图的相似度,最后就计算出了非常多的相似度: 如果只是单个目标的匹配,那只需要取相似度最大值所在的位置就 ...

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

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

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

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

  9. python正十三边形_一起学python-opencv十三(直方图反向投影和模板匹配)

    2D直方图 https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_histograms/ ...

最新文章

  1. 腾讯音乐招 iOS 开发, base 深圳,要求:本科、三年、OC,懂音视频开发优先。...
  2. python代码大全表解释-.python3基础之“术语表(1)”
  3. Linux系统查看分区文件系统类型
  4. php数组中插入数值,php中如何在数组指定位置插入数据单元
  5. 基于HTML在线考试系统开题报告,基于JSP的在线考试系统 开题报告.doc
  6. gtk+-hello,world
  7. 中国信通院专家当选ITU-T分布式账本焦点组副主席
  8. csharp:Convert Image to Base64 String and Base64 String to Image
  9. Android 应用快捷方式 ShortcutManager 简单说明
  10. CPC客户端的安装方法
  11. Qt插件之Qt Designer插件实现
  12. docker 部署jenkins + sonarqube + postgresql 代码扫描
  13. 武汉意向岗位(一)——中国建设银行数据运营中心
  14. 亿信华辰:怎样去断定一份数据的质量高低?数据质量如何评估?
  15. 【研一小白的白话理解】pytorch-CycleGAN-and-pix2pix
  16. 如何(以及为什么)在Word文档中使用隐藏文本
  17. 有哪些高质量的自学网站?
  18. multisim14晶振在哪里_石英晶振在multisim中哪里
  19. C语言—实现扫雷游戏(注释详解)
  20. 数据库查询语句遇到:Unknown column ‘XXXX‘ in ‘where clause‘解决方法

热门文章

  1. 下一代安全工具:SHA-3
  2. Python 调用C函数
  3. cocoaPod安装过程
  4. wfs方式获取最短路径
  5. Reactive Cocoa实践举例
  6. ios序列化与反序列化,本地化
  7. 日常检查IBM P系列小型机状态的项目及其相关命令
  8. 我学shell程序的记录
  9. pytorch中tensorboard使用
  10. 【OS】期末总结复习