python cv2 matchtemplate_OpenCV-Python系列十:模板匹配
模板匹配应用的场景非常多,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系列十:模板匹配相关推荐
- python中括号配对检测_使用模板匹配在Python上进行对象检测!(附代码)
了解如何在没有机器学习或任何框架的情况下在Python上进行对象检测 每当我们听说" 对象检测 "时,我们就会想到机器学习以及不同的框架.但是我们实际上可以在不使用机器学习或任何其 ...
- python opencv数字识别_基于模板匹配的手写数字识别(python+opencv)
智能计算课第一周的实验是做基于模板匹配的手写数字识别,光听见就很感兴趣,于是决定认真做做这个实验,本实验基于python3+opencv的python版本,所用到的知识都比较简单,基本上边学边做,技术 ...
- 【python版CV】图像轮廓模板匹配
文章目录 1.图像轮廓 1.1 findContours函数: 1.2 获取轮廓信息(可能会报错原因) 1.3 绘制轮廓: 1.4 轮廓特征: 1.5 轮廓近似: 1.6 边界矩形 2.模板匹配 3. ...
- OpenCV系列之模板匹配 | 三十一
目标 在本章中,您将学习 使用模板匹配在图像中查找对象 你将看到以下功能:cv.matchTemplate(),cv.minMaxLoc() 理论 模板匹配是一种用于在较大图像中搜索和查找模板图像位置 ...
- 【OpenCV + Python】模板匹配
模板匹配是用来在一副大图中搜寻查找模版图像位置的方法.OpenCV 为我们提供了函数:cv2.matchTemplate().和2D 卷积一样,它也是用模板图像在输入图像(大图)上滑动,并在每一个位置 ...
- Python+Opencv实现图像匹配——模板匹配
1.原理 简单来说,模板匹配就是拿一个模板(图片)在目标图片上依次滑动,每次计算模板与模板下方的子图的相似度,最后就计算出了非常多的相似度: 如果只是单个目标的匹配,那只需要取相似度最大值所在的位置就 ...
- OpenCV—python 模板匹配与图像特征匹配
文章目录 一.理论介绍与算法 二.算法代码 单目标匹配 多目标匹配 三 多尺度模板匹配 一.理论介绍与算法 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个 ...
- OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍
导读 模板匹配是用来在一副大图中搜寻查找模版图像位置的方法.绘制矩形是用来将模版图像的匹配结果展示出来的方法. 模板匹配实现简单(2~3行代码),计算效率高,不需要执行阈值化.边缘检测等操作来生成二值 ...
- python正十三边形_一起学python-opencv十三(直方图反向投影和模板匹配)
2D直方图 https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_histograms/ ...
最新文章
- 腾讯音乐招 iOS 开发, base 深圳,要求:本科、三年、OC,懂音视频开发优先。...
- python代码大全表解释-.python3基础之“术语表(1)”
- Linux系统查看分区文件系统类型
- php数组中插入数值,php中如何在数组指定位置插入数据单元
- 基于HTML在线考试系统开题报告,基于JSP的在线考试系统 开题报告.doc
- gtk+-hello,world
- 中国信通院专家当选ITU-T分布式账本焦点组副主席
- csharp:Convert Image to Base64 String and Base64 String to Image
- Android 应用快捷方式 ShortcutManager 简单说明
- CPC客户端的安装方法
- Qt插件之Qt Designer插件实现
- docker 部署jenkins + sonarqube + postgresql 代码扫描
- 武汉意向岗位(一)——中国建设银行数据运营中心
- 亿信华辰:怎样去断定一份数据的质量高低?数据质量如何评估?
- 【研一小白的白话理解】pytorch-CycleGAN-and-pix2pix
- 如何(以及为什么)在Word文档中使用隐藏文本
- 有哪些高质量的自学网站?
- multisim14晶振在哪里_石英晶振在multisim中哪里
- C语言—实现扫雷游戏(注释详解)
- 数据库查询语句遇到:Unknown column ‘XXXX‘ in ‘where clause‘解决方法