gpt4 book ai didi

python - 匹配 OpenCV Python 的 360 度暴力破解模板

转载 作者:行者123 更新时间:2023-12-02 16:04:47 26 4
gpt4 key购买 nike

我正在尝试使用下面的模板图像找到原始图像上的所有箭头,并在它们周围绘制一个矩形。我不想使用 Sift/Surf/homography/等。仅模板匹配。我只想使用 1 个模板,而不是生成 360 个单独的 1 度旋转模板作为引用。

模板: enter image description here

原始图片:enter image description here

到目前为止,这是我的代码

import cv2
import numpy as np
import imutils

template = cv2.imread("C:\\Users\\Desktop\\All\\images\\template.png")
template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
_ ,template = cv2.threshold(template,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

image = cv2.imread("C:\\Users\\Desktop\\All\\images\\original image.png")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_ ,image = cv2.threshold(image,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

MATCH_THRESH = 4000000

for degrees in range(0, 360, 1):
rotate = imutils.rotate_bound(template,degrees)
w, h = rotate.shape[::-1]
res = cv2.matchTemplate(image, rotate, cv2.TM_SQDIFF)
loc = np.where(res < MATCH_THRESH)
for pt in zip(*loc[::-1]):
rect = cv2.rectangle(image, pt, (pt[0] + w, pt[1] + h), (0,255,0), 4)
cv2.imshow("matches",image)
cv2.imshow("rectangle",rect)
cv2.waitKey(500)
cv2.destroyAllWindows()
print('Match for deg{}, pt({}, {}), sqdiff {}'.
format(degrees,pt[0],pt[1],res[pt[1],pt[0]]))

我将两个 .png 都转换为灰色,然后使用 Otsu 将它们转换为黑色和白色,这应该有助于模板匹配。

接下来,我从 0 开始以 1 度为步长旋转 360 度我的模板图像。“度”保存我当前所处的度数并使用此函数影响我的模板旋转,rotate = imutils.rotate_bound(template,度)。

然后我为每个度数运行 cv2.matchTemplate 并保存高于特定阈值的点的位置,并根据旋转后的模板大小在找到的匹配项周围绘制一个矩形。

这是我遇到问题的地方。我似乎无法让它显示矩形。我知道它找到了点,因为它是这么说的。我已经尝试了 cv2.imshow 的所有组合。你们看到我没看到的东西了吗?谢谢。

最佳答案

您看不到彩色矩形,因为您尝试显示它的图片已转换为灰度。我建议您在转换为灰度之前存储一个副本并使用它来显示矩形。

关于python - 匹配 OpenCV Python 的 360 度暴力破解模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53828668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com