我有一张样本图,我需要识别目标图中是否含有这个样本图,如果含有样本图,我需要计算出样本图在目标图所在位置的坐标。python
时间: 2024-03-17 21:45:39 浏览: 8
这个问题可以通过使用OpenCV库和模板匹配算法来解决。以下是一个简单的示例代码:
```python
import cv2
# 读取目标图和样本图
target_img = cv2.imread("target.jpg")
sample_img = cv2.imread("sample.jpg")
# 获取样本图的宽度和高度
sample_height, sample_width = sample_img.shape[:2]
# 使用 TM_CCOEFF_NORMED 方法进行模板匹配
res = cv2.matchTemplate(target_img, sample_img, cv2.TM_CCOEFF_NORMED)
# 获取匹配结果中的最大值和最大值的位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# 如果最大值大于0.8,则说明目标图中存在样本图
if max_val > 0.8:
# 计算样本图在目标图中的左上角和右下角坐标
top_left = max_loc
bottom_right = (top_left[0] + sample_width, top_left[1] + sample_height)
# 在目标图中绘制出样本图的位置
cv2.rectangle(target_img, top_left, bottom_right, (0, 0, 255), 2)
# 显示结果图像
cv2.imshow("Result", target_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("目标图中不存在样本图")
```
在上述代码中,我们首先使用 `cv2.imread()` 方法读取目标图和样本图。然后,我们使用 `cv2.matchTemplate()` 方法进行模板匹配,并将匹配结果存储在 `res` 变量中。接着,我们使用 `cv2.minMaxLoc()` 方法获取匹配结果中的最大值和最大值的位置。如果最大值大于阈值0.8,则说明目标图中存在样本图。我们可以计算样本图在目标图中的左上角和右下角坐标,并使用 `cv2.rectangle()` 方法在目标图中绘制出样本图的位置。最后,我们使用 `cv2.imshow()` 方法显示结果图像,并使用 `cv2.waitKey()` 和 `cv2.destroyAllWindows()` 方法等待用户按下任意键关闭窗口。