上面代码没返回小图在大图中的坐标
时间: 2023-09-01 12:06:21 浏览: 102
在大图中寻找小图,并定位具体坐标点
5星 · 资源好评率100%
非常抱歉,上面的代码我确实遗漏了返回小图在大图中的坐标。下面是修改后的代码,可以返回小图在大图中的左上角和右下角坐标:
```python
import torch
import torchvision.models as models
import torchvision.transforms as transforms
import cv2
import numpy as np
vgg = models.vgg16(pretrained=True).features
vgg.eval()
transform = transforms.Compose([
transforms.ToPILImage(),
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# 加载需要匹配的大图和小图
img = cv2.imread('big_image.jpg')
template = cv2.imread('small_image.jpg')
# 将大图和小图转换为PyTorch的Tensor格式
img_tensor = transform(img).unsqueeze(0) # 在第0个维度上增加一个维度
template_tensor = transform(template).unsqueeze(0)
# 对大图和小图分别进行特征提取
img_features = vgg(img_tensor)
template_features = vgg(template_tensor)
# 计算大图中每个位置与小图的相似度
result = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
# 找到相似度最高的位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
top_left = max_loc # 左上角坐标
bottom_right = (top_left[0] + template.shape[1], top_left[1] + template.shape[0]) # 右下角坐标
# 返回小图在大图中的左上角和右下角坐标
print("小图在大图中的左上角坐标:", top_left)
print("小图在大图中的右下角坐标:", bottom_right)
# 在大图中绘制矩形框
cv2.rectangle(img, top_left, bottom_right, (0, 0, 255), 2)
# 显示匹配结果
cv2.imshow('result', img)
cv2.waitKey(0)
```
希望这次回答能够满足您的需求,如果还有其他问题,请随时提出。
阅读全文