Python+OpenCV图像处理之模板匹配

摘要:
模板匹配是在整个图像区域中找到与给定子图像匹配的小区域。在OpenCV中,提供了相应的函数来完成此操作:matchTemplate函数:查找模板和输入图像之间的匹配,以获得匹配结果图像minMaxLoc函数:查找给定矩阵中的最大值和最小值,并给出它们的位置。几种常见的模板匹配算法:① TM_ SQDIFF为平方差匹配;TM_ SQDIFF_ NORMED是标准平方误差匹配。②TM_ CCORR是相关匹配;TM_ CCORR_NORMED是标准相关匹配。采用模板和图像之间的乘法运算。数字越大,匹配度越高,0表示匹配效果最差。

模板匹配就是在整个图像区域中发现与给定子图像匹配的小块区域

在OpenCV中,提供了相应的函数完成这个操作:

matchTemplate 函数:在模板和输入图像之间寻找匹配,获得匹配结果图像 
minMaxLoc 函数:在给定的矩阵中寻找最大和最小值,并给出它们的位置

几种常见的模板匹配算法:

①TM_SQDIFF是平方差匹配;TM_SQDIFF_NORMED是标准平方差匹配。利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大。

②TM_CCORR是相关性匹配;TM_CCORR_NORMED是标准相关性匹配。采用模板和图像间的乘法操作,数越大表示匹配程度较高, 0表示最坏的匹配效果。

③TM_CCOEFF是相关性系数匹配;TM_CCOEFF_NORMED是标准相关性系数匹配。将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列)。

python实现

import cv2
import numpy as np

__author__ = "boboa"


def template_demo():
    tpl = cv2.imread("image/tpl.jpg")
    target = cv2.imread("image/target1.jpg")
    # cv2.imshow("template_image", tpl)
    # cv2.imshow("target image", target)
    methods = [cv2.TM_CCOEFF_NORMED, cv2.TM_SQDIFF_NORMED, cv2.TM_CCORR_NORMED]
    th, tw = tpl.shape[:2]
    for md in methods:
        print(md)
        result = cv2.matchTemplate(target, tpl, md)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
        if md == cv2.TM_SQDIFF_NORMED:
            tl = min_loc
        else:
            tl = max_loc
        br = (tl[0] + tw, tl[1] + th)
        cv2.rectangle(target, tl, br, (0, 0, 255), 2)
        cv2.imshow("match-" + np.str(md), target)


if __name__ == "__main__":
    img = cv2.imread("img1.jpg")
    # cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
    # cv2.imshow("input image", img)
    template_demo()
    cv2.waitKey(0)
    cv2.destroyAllWindows()

运行结果

Python+OpenCV图像处理之模板匹配第1张

免责声明:文章转载自《Python+OpenCV图像处理之模板匹配》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kinect学习笔记(三)——深度数据的提取StringBuilder 以及 StringBuffer默认大小与扩容下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android中R.java各种错误修复

1.Android R.java文件丢失的问题 R.java这个文件是会自动生成的。但是有时候你写错xml文件的时候,R.java是不会自动生成对应的值。这个时候我们会很习惯去clean一下这个项目,这个时候会突然发现,R.java竟然不见了。        这个时候的你肯定非常的气愤,你可能会拼命在网上找答案,网上会有很多答案告诉你 右键项目-...

h5+App——分享是怎么实现的?

开发文档:https://www.html5plus.org/doc/zh_cn/share.html 实现分享的第一要义:【请参阅】 向开放平台申请配置参数 :https://ask.dcloud.net.cn/article/36 主要方法: 获取分享服务列表:plus.share.getServices(successCB,errorCB); 授权...

B--2-基础算法(2)--二分查找扩展

二分查找及其扩展专题 题目 排序数组中查找数字是否存在 排序数组中查找某数左右边界 排序数组中查找某数出现的次数 局部极小值问题 旋转排序数组中最小值 二分查找的坑 真尼玛!!!思路很简单,细节是魔鬼 写代码的时候,要定好你的搜索区间, [L,R] 还是 [L,R),不同情况的细节也不一样 R = array.size() / R = arr.si...

图像处理之卷积---任意卷积核的快速实现

卷积其实是图像处理中最基本的操作,我们常见的一些算法比如:均值模糊、高斯模糊、锐化、Sobel、拉普拉斯、prewitt边缘检测等等一些和领域相关的算法,都可以通过卷积算法实现。只不过由于这些算法的卷积矩阵的特殊性,一般不会直接实现它,而是通过一些优化的手段让计算量变小。但是有些情况下卷积矩阵的元素值无甚规律或者有特殊要求,无法通过常规手段优化,这个时候只...

[转]常见医疗扫描图像处理步骤

一 数据格式 1.1 dicom DICOM是医学图像中标准文件,这些文件包含了诸多的元数据信息(比如像素尺寸,每个维度的一像素代表真实世界里的长度)。此处以kaggle Data Science Bowl 数据集为例。 data-science-bowl-2017。数据列表如下: 后缀为 .dcm。 每个病人的一次扫描CT(scan)可能有几十到一百多...

Linux下解压缩文件命令总结

---------------------------------------------tar命令: -v 可视化-c 新建包-f 指定文件名(除非你用默认用户名)-x 解压target.tar-r 增加file文件到target.tar-t 列出target.tar中的文件-u 更新target.tar中的file文件-z 调用gzip-j 调用bzi...