在一个模板匹配中,读取多个不同的模板图像,在同一种方法下匹配目标图像的代码
时间: 2024-02-15 22:05:01 浏览: 192
以下是一个使用模板匹配函数 `cv2.matchTemplate()` 在目标图像中匹配多个不同模板图像的示例代码:
```python
import cv2
import numpy as np
# 读取目标图像
img = cv2.imread('target_image.jpg')
# 定义多个模板图像
template1 = cv2.imread('template1.jpg')
template2 = cv2.imread('template2.jpg')
template3 = cv2.imread('template3.jpg')
# 将模板图像和目标图像转换为灰度图像
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
template1_gray = cv2.cvtColor(template1, cv2.COLOR_BGR2GRAY)
template2_gray = cv2.cvtColor(template2, cv2.COLOR_BGR2GRAY)
template3_gray = cv2.cvtColor(template3, cv2.COLOR_BGR2GRAY)
# 获取模板图像的宽度和高度
w1, h1 = template1_gray.shape[::-1]
w2, h2 = template2_gray.shape[::-1]
w3, h3 = template3_gray.shape[::-1]
# 使用cv2.matchTemplate()函数进行模板匹配
res1 = cv2.matchTemplate(img_gray, template1_gray, cv2.TM_CCOEFF_NORMED)
res2 = cv2.matchTemplate(img_gray, template2_gray, cv2.TM_CCOEFF_NORMED)
res3 = cv2.matchTemplate(img_gray, template3_gray, cv2.TM_CCOEFF_NORMED)
# 设置阈值
threshold = 0.8
# 找到匹配结果中大于阈值的位置
loc1 = np.where(res1 >= threshold)
loc2 = np.where(res2 >= threshold)
loc3 = np.where(res3 >= threshold)
# 在目标图像中绘制矩形框
for pt in zip(*loc1[::-1]):
cv2.rectangle(img, pt, (pt[0]+w1, pt[1]+h1), (0,0,255), 2)
for pt in zip(*loc2[::-1]):
cv2.rectangle(img, pt, (pt[0]+w2, pt[1]+h2), (0,255,0), 2)
for pt in zip(*loc3[::-1]):
cv2.rectangle(img, pt, (pt[0]+w3, pt[1]+h3), (255,0,0), 2)
# 显示结果图像
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的示例代码中,我们首先读取了目标图像和多个模板图像,并将它们转换为灰度图像。然后,我们使用 `cv2.matchTemplate()` 函数在目标图像中匹配每个模板图像,并设置了一个阈值,找到匹配结果中大于阈值的位置。最后,我们在目标图像中绘制了矩形框,将匹配到的位置标示出来,并显示了结果图像。
阅读全文