python图像的模板匹配方法
时间: 2023-10-01 12:02:09 浏览: 50
在 Python 中,可以使用 OpenCV 库来实现图像模板匹配。
首先,需要准备好要用来匹配的模板图像和待匹配的大图像。然后,可以使用 OpenCV 库中的 `matchTemplate` 函数来进行模板匹配。这个函数需要传入待匹配的大图像和模板图像,并返回一个结果图像,其中包含了匹配的结果。
具体实现方法如下:
```python
import cv2
# 读取待匹配的大图像
img = cv2.imread('big_image.jpg')
# 读取模板图像
template = cv2.imread('template.jpg')
# 进行模板匹配
res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
```
在上面的代码中,我们使用了 `cv2.TM_CCOEFF_NORMED` 方法进行模板匹配。这种方法是使用归一化的相关系数来进行匹配,其中结果图像中的每个像素值都是匹配的相关系数。
匹配完成后,可以使用 OpenCV 库中的 `minMaxLoc` 函数来找到结果图像中的最佳匹配位置。这个函数会返回一个元组,其中包含了最大值和最小值以及它们的位置。
例如:
```python
# 在结果图像中找到最佳匹配位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# 根据
相关问题
python 图像模板匹配 匹配多个结果
要匹配多个结果,可以使用OpenCV中的cv2.matchTemplate()函数和cv2.minMaxLoc()函数。以下是一个示例代码,它使用模板匹配在图像中查找所有匹配项,并在每个匹配项周围画出矩形框。
```python
import cv2
import numpy as np
# 读取图像和模板
img = cv2.imread('image.jpg')
template = cv2.imread('template.jpg')
# 获取模板和图像的尺寸
th, tw = template.shape[:2]
ih, iw = img.shape[:2]
# 进行模板匹配
result = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
# 设置阈值
threshold = 0.8
# 获取匹配结果的位置
locations = np.where(result >= threshold)
locations = list(zip(*locations[::-1]))
# 画出矩形框
for loc in locations:
top_left = loc
bottom_right = (top_left[0] + tw, top_left[1] + th)
cv2.rectangle(img, top_left, bottom_right, (0, 0, 255), 2)
# 显示结果
cv2.imshow('Matched Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们通过设置阈值为0.8来获取所有匹配项的位置。然后使用cv2.rectangle()函数来画出矩形框,以便将匹配项标记出来。
python opencv模板匹配
以下是使用OpenCV实现图片模板匹配的Python代码示例:
```python
import cv2
import numpy as np
# 读取模板和待匹配图像
template = cv2.imread('template.jpg', 0)
img = cv2.imread('test.jpg', 0)
# 获取模板和待匹配图像的尺寸
w, h = template.shape[::-1]
W, H = img.shape[::-1]
# 使用相关系数匹配方法进行模板匹配
res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
# 设置匹配阈值
threshold = 0.8
# 获取匹配结果中大于阈值的位置
loc = np.where(res >= threshold)
# 在原图上标记匹配位置
for pt in zip(*loc[::-1]):
cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
# 显示匹配结果
cv2.imshow('Match Result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上述代码中,我们首先读取了模板和待匹配图像,并获取了它们的尺寸。然后使用OpenCV中的matchTemplate函数进行模板匹配,得到了匹配结果res。接着,我们设置了匹配阈值threshold,并使用np.where函数获取了匹配结果中大于阈值的位置loc。最后,我们在原图上标记了匹配位置,并显示了匹配结果。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)