采用模板匹配技术,检测出图像Heart.jpg中的所有红桃
时间: 2024-02-16 21:04:51 浏览: 147
使用模板匹配技术可以在图像中检测出指定的模板。对于这个问题,我们需要首先准备一个红桃的模板,然后将其与图像中的所有区域进行匹配,以检测出所有的红桃。以下是一个使用模板匹配技术检测图像中所有红桃的例子:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图像和模板
img = cv2.imread('Heart.jpg')
template = cv2.imread('Heart_template.jpg')
# 将模板转换为灰度图像
template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# 获取模板的尺寸
w, h = template_gray.shape[::-1]
# 对图像进行模板匹配
res = cv2.matchTemplate(img, template_gray, 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)
# 显示原始图像和标记出红桃位置的图像
plt.subplot(121), plt.imshow(cv2.cvtColor(template, cv2.COLOR_BGR2RGB)), plt.title('Template')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title('Result')
plt.xticks([]), plt.yticks([])
plt.show()
```
在上面的代码中,我们首先读取了原始图像和红桃的模板,并将模板转换为灰度图像。接着,我们使用cv2.matchTemplate()函数对图像进行模板匹配,得到一个匹配结果矩阵res。然后,我们设置了一个阈值threshold,并获取匹配结果中高于阈值的位置。最后,我们在原始图像中标记出红桃位置,并显示原始图像和标记出红桃位置的图像。
阅读全文