opencv模板匹配多目标
时间: 2023-08-31 21:09:19 浏览: 87
OpenCV提供了多种模板匹配算法,可以用于匹配多个目标。其中,最常用的算法是基于归一化互相关(Normalized Cross Correlation,NCC)的模板匹配。
下面是一个简单的例子,说明如何使用OpenCV进行多目标模板匹配:
```
import cv2
import numpy as np
# 加载图像和模板
img = cv2.imread('image.jpg')
template1 = cv2.imread('template1.jpg')
template2 = cv2.imread('template2.jpg')
# 获取模板的宽度和高度
w, h = template1.shape[1], template1.shape[0]
# 使用归一化互相关进行模板匹配
res1 = cv2.matchTemplate(img, template1, cv2.TM_CCOEFF_NORMED)
res2 = cv2.matchTemplate(img, template2, cv2.TM_CCOEFF_NORMED)
# 设置阈值,找到匹配度高于阈值的位置
threshold = 0.8
loc1 = np.where(res1 >= threshold)
loc2 = np.where(res2 >= threshold)
# 使用矩形框标记匹配位置
for pt in zip(*loc1[::-1]):
cv2.rectangle(img, pt, (pt[0]+w, pt[1]+h), (0, 0, 255), 2)
for pt in zip(*loc2[::-1]):
cv2.rectangle(img, pt, (pt[0]+w, pt[1]+h), (0, 255, 0), 2)
# 显示结果
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,首先加载了图像和两个模板。然后,使用`cv2.matchTemplate()`函数进行模板匹配,得到一个匹配结果矩阵。接下来,设定一个阈值,找到匹配度高于阈值的位置。最后,使用矩形框标记匹配位置,并显示结果。
需要注意的是,上面的代码只适用于单通道灰度图像。如果要处理多通道彩色图像,需要将图像和模板分别转换为灰度图像。
阅读全文