opencv 二值匹配
时间: 2023-07-07 19:41:52 浏览: 98
OpenCV中的二值匹配可以使用模板匹配函数`cv2.matchTemplate()`来实现。
首先,需要将原始图像和模板图像转换为灰度图像,并将其二值化。可以使用OpenCV的`cv2.cvtColor()`和`cv2.threshold()`函数来实现。例如:
```
import cv2
# 读取原始图像和模板图像
img = cv2.imread('image.jpg')
template = cv2.imread('template.jpg')
# 将原始图像和模板图像转换为灰度图像
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# 将灰度图像二值化
_, img_binary = cv2.threshold(img_gray, 0, 255, cv2.THRESH_BINARY)
_, template_binary = cv2.threshold(template_gray, 0, 255, cv2.THRESH_BINARY)
```
接下来,可以使用`cv2.matchTemplate()`函数进行模板匹配。该函数会在原始图像中搜索与模板图像最相似的区域,并返回匹配结果的矩阵。例如:
```
# 使用cv2.matchTemplate()函数进行模板匹配
result = cv2.matchTemplate(img_binary, template_binary, cv2.TM_CCOEFF_NORMED)
# 获取匹配结果的最大值和最小值
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
# 绘制匹配结果的矩形框
w, h = template_binary.shape[::-1]
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img, top_left, bottom_right, (0, 0, 255), 2)
# 显示匹配结果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
以上代码会将匹配结果绘制成矩形框,并显示在窗口中。其中,`cv2.matchTemplate()`函数的第三个参数可以设置匹配算法,常用的有`cv2.TM_CCOEFF_NORMED`和`cv2.TM_CCORR_NORMED`。两者的区别在于匹配结果的值范围不同,前者的值范围在0到1之间,后者的值范围在-1到1之间。