gpt4 book ai didi

python - 如何缩小图像搜索范围以进行模板匹配?

转载 作者:行者123 更新时间:2023-12-02 17:56:30 29 4
gpt4 key购买 nike

我正在使用openCV模板匹配算法,但是在基础图像中搜索模板图像会花费很长时间。
有什么方法可以告诉算法仅在给定基础图像的特定区域(例如上,下,左,右)中搜索模板图像?
我的目标是减少搜索时间,其他任何方法都应得到赞赏。
这是我的代码-

template = cv2.imread(temp_img)
template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
sigma=0.33
v = np.median(template)
lower = int(max(0, (1.0 - sigma) * v))
upper = int(min(255, (1.0 + sigma) * v))
template = cv2.Canny(template, lower, upper)
(tH, tW) = template.shape[:2]
baseImage = cv2.imread(base_img)
gray = cv2.cvtColor(baseImage, cv2.COLOR_BGR2GRAY)
found = None
threshold = 0.8
for scale in np.linspace(0.1, 0.5, 30)[::-1]:
resized = imutils.resize(gray, width=int(gray.shape[1] * scale))
r = gray.shape[1] / float(resized.shape[1])
if resized.shape[0] < tH or resized.shape[1] < tW:
break
v = np.median(resized)
lower = int(max(0, (1.0 - sigma) * v))
upper = int(min(255, (1.0 + sigma) * v))
canny = cv2.Canny(resized, lower, upper)
res = cv2.matchTemplate(canny, template, cv2.TM_CCOEFF_NORMED)
(min_val, max_val, _, max_loc) = cv2.minMaxLoc(res)
if found is None or max_val > found[0]:
found = (max_val, max_loc, r)
(max_val, max_loc, r) = found
if max_val > threshold:
(start_x, start_y) = (int(max_loc[0] * r), int(max_loc[1] * r))
(end_x, end_y) = (int((max_loc[0] + tW) * r), int((max_loc[1] + tH) * r))
cv2.rectangle(original_image, (start_x, start_y), (end_x, end_y), (0,255,0), 2)
cv2.imshow('detected', original_image)
cv2.imwrite('detected.png', original_image)
cv2.waitKey(0)

最佳答案

花费很长时间的原因是您正在搜索给定图像中模板图像的每个比例。

for scale in np.linspace(0.1, 0.5, 30)[::-1]:
resized = imutils.resize(gray, width=int(gray.shape[1] * scale))
您可以删除 for循环以减少搜索时间。折衷方案可能是缺少模板图像。例如:如果给定图像中有5个模板图像,则可能会找到2个。
第二个选项是更改 linspace参数:
  • 当前参数:
  • 开始: 0.1
  • 停止: 0.5
  • num: 30
  • 如果我们解释当前的参数:
  • 0.10.5比率的范围:
  • enter image description here enter image description here enter image description here enter image description here enter image description here
  • 您将从每个样本生成30个样本。

  • 可能的解决方案:
  • 您可以缩短范围,即从0.4-0.5 np.linspace(0.4, 0.5, 30)
  • 或者您可以减小生成的样本大小,即np.linspace(0.1, 0.5, 20) 20
  • 关于python - 如何缩小图像搜索范围以进行模板匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64589293/

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