python边缘模板匹配
时间: 2025-01-06 14:46:05 浏览: 3
### 边缘模板匹配简介
边缘模板匹配是一种通过比较目标图像和模板图像之间的边缘特征来定位对象的方法。这种方法可以提高识别精度并减少光照变化的影响[^2]。
### 使用OpenCV进行边缘模板匹配
为了执行边缘模板匹配,在Python中通常会利用`cv2.Canny()`函数检测图像中的边缘,然后再应用`cv2.matchTemplate()`来进行模式匹配操作。以下是具体实现方法:
#### 准备工作
安装必要的库:
```bash
pip install opencv-python numpy matplotlib
```
加载待处理图片以及模板图片,并转换成灰度图形式以便后续处理:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
img_rgb = cv2.imread('source_image.png')
template = cv2.imread('template_image.png')
# 转换成灰色调
gray_img = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
gray_template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
```
#### 边缘提取
采用Canny算子分别对源图像与模板图像做边缘化处理:
```python
edges_img = cv2.Canny(gray_img, threshold1=50, threshold2=150)
edges_temp = cv2.Canny(gray_template, threshold1=50, threshold2=150)
plt.subplot(121), plt.imshow(edges_img,cmap='gray'), plt.title('Edges of Source Image')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(edges_temp,cmap='gray'), plt.title('Edges of Template Image')
plt.xticks([]), plt.yticks([])
plt.show()
```
#### 执行模板匹配
使用经过边缘化的图像作为输入参数调用`matchTemplate()`函数完成匹配过程;最后借助于`minMaxLoc()`获取最佳匹配位置的信息。
```python
res = cv2.matchTemplate(edges_img, edges_temp, method=cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = max_loc
h, w = gray_template.shape[:2]
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img_rgb, top_left, bottom_right, color=(0, 255, 0), thickness=2)
plt.figure(figsize=[18, 6])
plt.subplot(131); plt.imshow(cv2.cvtColor(edges_img, cv2.COLOR_GRAY2RGB)); plt.title("Edge Detected Input");
plt.subplot(132); plt.imshow(res, cmap="jet"); plt.title("Heat Map from Matched Template");
plt.subplot(133); plt.imshow(cv2.cvtColor(img_rgb, cv2.COLOR_BGR2RGB)); plt.title("Detected Point with Rectangle Box");
plt.show()
```
上述代码展示了如何在Python环境中运用OpenCV库实施基本的边缘模板匹配流程[^3]。
阅读全文