网站推广活动方案,公司网站格式,前端需要掌握哪些知识,沧州网站建设哪家专业引言
在图像处理和计算机视觉中#xff0c;模板匹配是一种常用的技术#xff0c;用于在一幅较大的图像中查找与给定模板图像相似的部分。然而#xff0c;在实际应用中#xff0c;目标物体可能会出现在不同的角度#xff0c;这就需要我们在匹配之前对模板进行旋转处理。本…引言
在图像处理和计算机视觉中模板匹配是一种常用的技术用于在一幅较大的图像中查找与给定模板图像相似的部分。然而在实际应用中目标物体可能会出现在不同的角度这就需要我们在匹配之前对模板进行旋转处理。本文将介绍如何使用 OpenCV 进行模板匹配并演示如何处理旋转模板。
模板匹配原理
模板匹配是通过比较模板图像与目标图像中的每一个可能位置来完成的。OpenCV 提供了多种模板匹配的方法其中 cv2.matchTemplate 是一个常用函数它可以计算模板与目标图像之间的相似度。常见的匹配方法包括
cv2.TM_SQDIFF平方差匹配。cv2.TM_CCORR相关匹配。cv2.TM_CCOEFF相关系数匹配。cv2.TM_CCOEFF_NORMED归一化相关系数匹配。
在本文中我们将使用 cv2.TM_CCOEFF_NORMED 方法进行模板匹配。
实验素材 代码讲解 读取图像和转换为灰度图 import cv2
import numpy as npimg_rgb cv2.imread(picture_video/image.jpg)
img_gray cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template cv2.imread(picture_video/res.jpg, 0) 解释: 使用 cv2.imread 读取原始图像和模板图像。将原始图像转换为灰度图 img_gray因为模板匹配通常在灰度图上进行。 旋转模板图像 # 旋转 90 度k-1 表示顺时针旋转 90 度
rotated_image1 np.rot90(template, k-1)
# 旋转 90 度k1 表示逆时针旋转 90 度
rotated_image2 np.rot90(template, k1) 解释: 使用 np.rot90 函数旋转模板图像。k-1 表示顺时针旋转 90 度k1 表示逆时针旋转 90 度。 获取模板图像的尺寸 h, w template.shape[:2] 解释: 获取模板图像的高度 h 和宽度 w。 使用模板匹配方法 cv2.matchTemplate 进行模板匹配 res cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
res1 cv2.matchTemplate(img_gray, rotated_image1, cv2.TM_CCOEFF_NORMED)
res2 cv2.matchTemplate(img_gray, rotated_image2, cv2.TM_CCOEFF_NORMED) 解释: 使用 cv2.matchTemplate 函数进行模板匹配cv2.TM_CCOEFF_NORMED 方法用于计算归一化的相关系数。 设定匹配阈值并获取匹配结果 threshold 0.9
loc np.where(res threshold)
loc1 np.where(res1 threshold)
loc2 np.where(res2 threshold) 解释: 设定匹配阈值 threshold只有匹配分数大于等于这个阈值的区域才会被认为是匹配成功的位置。使用 np.where 函数获取所有匹配分数大于等于阈值的点的坐标。 在原图上绘制匹配区域的矩形框 for pt in zip(*loc[::-1]):cv2.rectangle(img_rgb, pt, (pt[0] w, pt[1] h), (0, 0, 255), 1)for pt in zip(*loc1[::-1]):cv2.rectangle(img_rgb, pt, (pt[0] w, pt[1] h), (0, 0, 255), 1)for pt in zip(*loc2[::-1]):cv2.rectangle(img_rgb, pt, (pt[0] w, pt[1] h), (0, 0, 255), 1) 解释: 使用 cv2.rectangle 函数在原图 img_rgb 上绘制矩形框标出匹配成功的区域。矩形框的颜色为红色 (0, 0, 255)线宽为 1。 显示结果图像 cv2.imshow(res.jpg, img_rgb)
cv2.waitKey(0) 解释: 使用 cv2.imshow 显示带有匹配区域的图像。使用 cv2.waitKey(0) 等待用户按键关闭窗口。输出结果
总结
通过上述代码演示我们展示了如何在 OpenCV 中进行模板匹配并处理旋转模板。模板匹配是一种基本的图像处理技术广泛应用于目标检测、图像识别等领域。通过旋转模板我们可以提高匹配的鲁棒性即使目标物体在图像中处于不同的角度也能准确地识别出来。这种方法在实际应用中非常有用特别是在需要检测旋转目标物体的情况下。