opencv同时匹配三个不同的模板opencv
时间: 2023-09-18 07:11:42 浏览: 44
可以使用OpenCV中的模板匹配函数来实现同时匹配三个不同的模板。具体步骤如下:
1. 读取原始图像和三个模板图像
2. 使用cv2.matchTemplate()函数进行模板匹配,分别得到三个匹配结果
3. 使用cv2.minMaxLoc()函数找到三个匹配结果中最大值的位置
4. 根据最大值位置和模板大小,确定匹配结果的左上角坐标和右下角坐标,将其保存到一个列表中
5. 在原始图像上绘制匹配结果的矩形框
下面是示例代码:
```python
import cv2
import numpy as np
# 读取原始图像和三个模板图像
img = cv2.imread('image.jpg')
template1 = cv2.imread('template1.jpg')
template2 = cv2.imread('template2.jpg')
template3 = cv2.imread('template3.jpg')
# 获取模板大小
h, w = template1.shape[:2]
# 使用cv2.matchTemplate()函数进行模板匹配,分别得到三个匹配结果
res1 = cv2.matchTemplate(img,template1,cv2.TM_CCOEFF_NORMED)
res2 = cv2.matchTemplate(img,template2,cv2.TM_CCOEFF_NORMED)
res3 = cv2.matchTemplate(img,template3,cv2.TM_CCOEFF_NORMED)
# 使用cv2.minMaxLoc()函数找到三个匹配结果中最大值的位置
_, max_val1, _, max_loc1 = cv2.minMaxLoc(res1)
_, max_val2, _, max_loc2 = cv2.minMaxLoc(res2)
_, max_val3, _, max_loc3 = cv2.minMaxLoc(res3)
# 根据最大值位置和模板大小,确定匹配结果的左上角坐标和右下角坐标,将其保存到一个列表中
match_locations = []
match_locations.append((max_loc1, (max_loc1[0] + w, max_loc1[1] + h)))
match_locations.append((max_loc2, (max_loc2[0] + w, max_loc2[1] + h)))
match_locations.append((max_loc3, (max_loc3[0] + w, max_loc3[1] + h)))
# 在原始图像上绘制匹配结果的矩形框
for (start, end) in match_locations:
cv2.rectangle(img, start, end, (0, 0, 255), 2)
# 显示结果
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码可以同时匹配三个不同的模板,并在原始图像上绘制匹配结果的矩形框。你只需要将'image.jpg'、'template1.jpg'、'template2.jpg'、'template3.jpg'替换成你自己的图片路径即可。