java opencv 模板匹配算法_opencv 模板匹配
效果如下,就算有一些不一样也是能够匹配成功的,但是大小必须一样,不能是缩小或者放大后的图片,不然无法匹配成功最亮的代表最优匹配 最暗的地方代表最优匹配 使用不同的函数计算匹配程度,有的函数值越大匹配程度越高,有的相反,注意下import cv2img = cv2.imread('img.png')part = cv2.imread('part_big.png')cv2.imshow('img'..
效果如下,就算有一些不一样也是能够匹配成功的,但是大小必须一样,不能是缩小或者放大后的图片,不然无法匹配成功


最亮的代表最优匹配

最暗的地方代表最优匹配

使用不同的函数计算匹配程度,有的函数值越大匹配程度越高,有的相反,注意下
import cv2
img = cv2.imread('img.png')
part = cv2.imread('part_big.png')
cv2.imshow('img', img)
cv2.imshow('part', part)
methods = [cv2.TM_SQDIFF_NORMED, cv2.TM_CCORR_NORMED, cv2.TM_CCOEFF_NORMED]
part_height, part_weight = part.shape[:2]
print(part_height, part_weight)
for method in methods:
# print(method)
result = cv2.matchTemplate(img, part, method)
# print(result)
# 根据不同的公式计算不同的值
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
print(min_val, max_val, min_loc, max_loc)
# 根据不同的算法,选择匹配程度最大的区域
if method == cv2.TM_SQDIFF_NORMED:
# 该算法值越小,匹配程度越高
img_loc = min_loc
else:
img_loc = max_loc
br = (img_loc[0] + part_weight, img_loc[1] + part_height)
cv2.rectangle(img, img_loc, br, (0, 0, 255), 2)
cv2.imshow("match" + str(method), img)
cv2.imshow("res" + str(method), result)
cv2.waitKey(1000)
cv2.waitKey(0)
计算出来的位置都差不多
0.030255908146500587 1.0 (712, 505) (1455, 590)
0.6245771050453186 0.9769605994224548 (488, 713) (712, 505)
-0.43960249423980713 0.8634197115898132 (1386, 614) (712, 505)
转载至链接:https://my.oschina.net/ahaoboy/blog/1919982
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)