python - 如何在多个图像中找到一个模板?
问题描述
我有一个模板和几张图片。所以问题是找出图像中是否有这个模板。我写了一些循环,但我认为它不会返回布尔值......
for i in images:
res = cv2.matchTemplate(i,templateDealer,cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(i, top_left, bottom_right, (0, 255, 0), 2)
result.append(res)
请帮我完成它...
解决方案
matchTemplate
返回一个 2D 数组,其中包含每个像素位置的匹配值 - 模板与该位置的匹配程度。
cv2.minMaxLoc(res)
返回图像中最佳匹配的值和位置。当您在视觉上比较它时,它可能不是真正的匹配,但它是算法返回的最高值。您可以在多张图像上比较这个最高值,总体最高的是您要寻找的那个。
注意:您不应该为此使用归一化算法,请使用cv2.TM_CCOEFF
而不是cv2.TM_CCOEFF_NORMED
您需要做的是附加一个包含最高值的元组及其位置:
result.append((max_val, max_loc))
。
处理完所有图像后,找到最高的 max_val,并使用它的 max_loc 绘制一个矩形
推荐阅读
- graphql - Apollo GraphQL:从服务器调用突变?
- flutter - NoSuchMethodError:在 null 上调用了方法“showSnackBar”
- ruby-on-rails - Rails 中的protect_from_forgery 和verify_authenticity_token 有什么区别?
- scala - 如何从Scala中的元组列表中的元素获取不同的值
- spring - spring-boot 错误:超过最大重定向。可能陷入重定向循环
- javascript - 旨在在谷歌地图上移动的标记创建两对。一个会移动,一个会卡在初始位置
- oracle - ORA-01919: 角色 'RESTRICTED_ROLE1' 不存在
- c++ - 将 double 转换为 LPARAM 时遇到问题
- r - group_by 函数正在将数据帧转换为 tibble
- oracle - 从 Oracle apex 应用程序运行 Unix 命令