扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要介绍OpenCV中模板匹配的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
创新互联专注于企业营销型网站、网站重做改版、洱源网站定制设计、自适应品牌网站建设、H5高端网站建设、成都商城网站开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为洱源等各大城市提供网站开发制作服务。/ 01 / 模板匹配
模板匹配,就是在整个图像区域里发现与给定子图像相匹配的小块区域。
这里需要一个模板图像(给定的子图像)和一个待检测的图像(原图像)。
在待检测图像上,从左向右,从上向下计算模板图像与重叠子图像的匹配度,匹配度越大,两者相同的可能性越大。
这里主要涉及OpenCV的cv2.matchTemplate()
和cv2.minMaxLoc()
函数。
第一个函数作用是在模板和输入图像之间寻找匹配,获得匹配结果图像。
第二个函数的作用则是在给定的矩阵中寻找大和最小值(包括它们的位置)。
其中模板匹配算法有以下六种。
# 第一类,利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大 # 平方差匹配 method=CV_TM_SQDIFF # 标准平方差匹配 method=CV_TM_SQDIFF_NORMED # 第二类,采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果 # 相关匹配 method=CV_TM_CCORR # 标准相关匹配 method=CV_TM_CCORR_NORMED # 第三类,将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列) # 相关系数匹配 method=CV_TM_CCOEFF # 标准相关系数匹配 method=CV_TM_CCOEFF_NORMED
标准化意味着将数值统一到0~1。
除了平方差类型的是值越小越好,其他的都是值越大越好。
/ 02 / 图像检索
首先来看一下两张图像,都为灰度图。
import cv2 # 读取待检测图像 img = cv2.imread('game.png', 0) # 读取模板图像 temple = cv2.imread('temple.png', 0) # 显示灰度处理后的待检测图像 cv2.namedWindow('sample', 0) cv2.resizeWindow('sample', 400, 600) cv2.imshow('sample', img) # 显示灰度处理后的模板图像 cv2.namedWindow('target', 0) cv2.resizeWindow('target', 400, 600) cv2.imshow('target', temple)
输出结果如下。
第一张为模板图像,第二张为待检测图像。
下面使用OpenCV的两个函数,来实现模板匹配。
# 获取模板图像的高和宽 th, tw = temple.shape[:2] print(th, tw) # 使用标准相关系数匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性 result = cv2.matchTemplate(img, temple, cv2.TM_CCOEFF_NORMED) # result为匹配结果矩阵 # print(result) # TM_CCOEFF_NORMED方法处理后的结果图像 cv2.namedWindow('match_r', 0) cv2.resizeWindow('match_r', 400, 600) # 显示窗口 cv2.imshow('match_r', result) # 使用函数minMaxLoc,确定匹配结果矩阵的大值和最小值(val),以及它们的位置(loc) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) # 此处选取大值的位置,为图像的左上角 tl = max_loc # 获取图像的右下角 br = (tl[0]+tw, tl[1]+th) # 绘制矩形框 cv2.rectangle(img, tl, br, (0, 0, 255), 2) # 设置显示窗口 cv2.namedWindow('match', 0) cv2.resizeWindow('match', 400, 600) # 显示窗口 cv2.imshow('match', img) # 结束 cv2.waitKey(0) cv2.destroyAllWindows()
输出结果如下。
第一张图中最白的位置,即代表着最高的匹配。
第二张图中,矩形框则代表着匹配到的结果。
通过矩形框的位置参数,结合模板图像的大小,便可得到小跳棋中心点位置(底部)。
以上是“OpenCV中模板匹配的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联成都网站设计公司行业资讯频道!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流