OpenCV——模版匹配简介
- OpenCV 是一个非常强大的计算机视觉库,其中的模板匹配功能提供了高效的工具来实现图像中的目标定位。
- 从本质上来说,模板匹配是一种用于在给定的图像(或其他范例的数据,如文本序列等,但主要以图像为例)中探求与已知模板最相似部分的方法。这个模板可以是一个小的图像区域,比方,你想在一张风景照片中找到某个特定的标志,这个标志的图像就是模板。
- 它的根本原理是通过在目标图像的各个位置滑动模板,并计算模板与图像在每个位置的相似度度量。这个相似度度量可以通过多种方式计算,比方计算像素值的差别等。
模版匹配使用场景
- 目标检测:假设在一个监控视频中,需要检测是否出现了特定的物体,如汽车的车牌。可以将车牌的标准图像作为模板,在视频的每一帧图像中进行模板匹配,找到与车牌模板最相似的区域,从而实现车牌的定位检测。
- 物体辨认:如果要辨认图像中的某个产物品牌标志,把不同品牌标志的图像做成模板,在目标图像中进行匹配,通过比力匹配程度来判断物体属于哪个品牌。
OpenCV 中模板匹配的函数
在 OpenCV 中,主要使用matchTemplate函数来进行模板匹配。这个函数的根本语法如下:
- result = cv2.matchTemplate(image, templ, method)
复制代码 参数
- image:这是目标图像,也就是要在其中探求模板的图像。它应该是一个 8 位或 32 位的单通道或彩色图像。
- templ:这是模板图像,是要在目标图像中找到的小图像区域。同样可以是单通道或彩色图像,但要注意其尺寸通常比目标图像小。
- method:这是匹配方法,OpenCV 提供了多种匹配方法,如cv.TM_SQDIFF(平方差匹配法)、cv.TM_CCORR(相关性匹配法)、cv.TM_CCOEFF(相关系数匹配法)等。不同的方法在计算模板和目标图像之间的相似度时有不同的侧重点。
- 比方,cv.TM_SQDIFF方法计算模板与目标图像每个位置的平方差,得到的效果矩阵中,值越小表示匹配程度越高;而cv.TM_CCORR方法计算相关性,值越大表示匹配程度越高。
OpenCV——模版匹配实例
对下方图片进行模版匹配:
模版:
目标:找到图中所有的箭头
导入所需库
- 起首需要导入 OpenCV 库和 NumPy 库。
- import cv2
- import numpy as np
复制代码 读取图片并处理图片
- img_rgb = cv2.imread('yuan_tu.jpg')
- # 对图片进行灰度图处理
- img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY)
- template = cv2.imread('jian_tou.jpg', 0)
- # 读取模版图片的高和宽
- h,w = template.shape[:2]
复制代码 对模版图片进行处理
通过对模版图片的顺时针和逆时针处理,后面能将所有箭头都找出。
- # 分别顺时针逆时针旋转
- xuan_zhuan1 =cv2.rotate(template,cv2.ROTATE_90_CLOCKWISE)
- xuan_zhuan2 =cv2.rotate(template,cv2.ROTATE_90_COUNTERCLOCKWISE)
复制代码 进行模版匹配
通过遍历箭头图片和处理后的两张箭头图片,将得到的效果绘制到原图上。
- # 进行模版匹配
- for i in [template,xuan_zhuan1,xuan_zhuan2]:
- res = cv2.matchTemplate(img_gray,i,cv2.TM_CCOEFF_NORMED)
- # 设定匹配阈值
- threshold = 0.9
- # 获取匹配结果中所有符合阈值的坐标
- loc = np.where(res>=threshold)
- # 遍历所有匹配点
- for pt in zip(*loc[::-1]):
- # 在原图上绘制匹配区域的矩形框
- cv2.rectangle(img_rgb,pt,(pt[0]+w,pt[1]+h),(0,0,255),1)
复制代码 表现模版匹配的效果
表现图片效果,结束后释放内存。
- cv2.imshow('res.png',img_rgb)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
复制代码
注意事项
- 图像预处理:在进行模板匹配之前,大概需要对目标图像和模板图像进行预处理。比方,将图像转换为灰度图(如果使用基于灰度的匹配方法),或者进行归一化操作以减少光照等因素的影响。可以使用cv.cvtColor函数将彩色图像转换为灰度图,如gray_target = cv.cvtColor(target_image, cv.COLOR_BGR2GRAY)。
- 多目标匹配:如果目标图像中大概存在多个与模板匹配的目标,上述示例只是找到了最佳匹配位置。要找到所有匹配位置,可以设置一个阈值,当匹配程度(根据匹配方法得到的效果矩阵中的值)凌驾这个阈值时,就以为是一个匹配目标。然后通过遍历效果矩阵来找到所有满意阈值条件的位置,并标记出来。
- 性能优化:当处理大尺寸图像或复杂模板时,模板匹配大概会比力耗时。可以思量使用图像金字塔等技术来加速匹配过程,先在低分辨率的图像上进行粗匹配,然后在高分辨率图像上进行精匹配。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |