首页 > 其他分享 >OpenCV模板匹配(匹配图片中对应元素)

OpenCV模板匹配(匹配图片中对应元素)

时间:2024-03-26 13:33:44浏览次数:20  
标签:匹配 img cv2 OpenCV TM 图像 模板

OpenCV模板匹配(匹配图片中对应元素)

模板匹配方法

模板是被查找目标的图像,查找模板在原始图像中的哪个位置的过程就叫模板匹配。OpenCV提供的matchTemplate()方法就是模板匹配方法,其语法如下:

result = cv2.matchTemplate(image, templ, method, mask)

参数说明:

  • image:原始图像。
  • templ:模板图像,尺寸必须小于或等于原始图像。
  • method:匹配的方法,可用参数值如下表所示:
参数值含义
cv2.TM_SQDIFF0差值平方和匹配,也叫平方差匹配。可以理解为差异程度。匹配程度越高,计算结果越小。完全匹配的结果为0
cv2.TM_SQDIFF_NORMED1标准差值平方和匹配,也叫标准平方差匹配,规则同上
cv2.TM_CCORR2相关匹配。可以理解为相似程度,匹配程度越高,计算结果越大
cv2.TM_CCORR_NORMED3标准相关匹配,规则同上
cv2.TM_CCOEFF4相关系数匹配,也属于相似程度,计算结果为-1~1的浮点数,1表示完全匹配,О表示毫无关系,-1表示2张图片亮度刚好相反
cv2.TM_CCOEFF_NORMED5标准相关系数匹配,规则同上
  • mask:可选参数。掩模,只有cv2.TM_SQDIFF和cv2.TM_CCORR_NORMED支持此参数,建议采用默认值。
    返回值说明
  • result:计算得出的匹配结果。如果原始图像的宽、高分别为W、H,模板图像的宽、高分别为w、h,result就是一个W-w+1列、H-h+1行的32位浮点型数组。数组中每一个浮点数都是原始图像中对应像素位置的匹配结果,其含义需要根据method参数来解读。

单个元素进行匹配并绘制矩形框

效果

要匹配的元素:
在这里插入图片描述
匹配的图片:
在这里插入图片描述
匹配后的图片:
在这里插入图片描述

代码

import cv2
img = cv2.imread("img_total.png")  # 读取原始图像
templ = cv2.imread("target.png")  # 读取模板图像
width, height, c = templ.shape  # 获取模板图像的宽度、高度和通道数
results = cv2.matchTemplate(img, templ, cv2.TM_SQDIFF_NORMED)  # 按照标准平方差方式匹配
# 获取匹配结果中的最小值、最大值、最小值坐标和最大值坐标
minValue, maxValue, minLoc, maxLoc = cv2.minMaxLoc(results)
resultPoint1 = minLoc  # 将最小值坐标当做最佳匹配区域的左上角点坐标
# 计算出最佳匹配区域的右下角点坐标
resultPoint2 = (resultPoint1[0] + width, resultPoint1[1] + height)
# 在最佳匹配区域位置绘制红色方框,线宽为2像素
cv2.rectangle(img, resultPoint1, resultPoint2, (0, 0, 255), 2)
cv2.imshow("img", img)  # 显示匹配的结果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

标签:匹配,img,cv2,OpenCV,TM,图像,模板
From: https://blog.csdn.net/summerriver1/article/details/136984333

相关文章

  • 写模板,树状数组。
    1根据长度初始化,单点更新,区间查询。可以查询区间和(输入为位置+数值),可以查询区间内频次(输入为数值+频次1)。2根据输入数据线性初始化。3根据输入数据频次线性初始化,区间更新,单点查询。根据差分后的数组求前缀和(单点查询)。classFenwickTree{public:FenwickTree(......
  • 洛谷 P3374 【模板】树状数组 1
    classFenwickTree{public:FenwickTree(intsz):sz_(sz){ft_.resize(sz_);}FenwickTree(vector<longlong>&f){sz_=int(f.size());ft_.assign(sz_,0);for(inti=1;i<sz_;++i){ft......
  • 洛谷 P3368 【模板】树状数组 2
    classFenwickTree{public:FenwickTree(intsz):sz_(sz){ft_.resize(sz_);}FenwickTree(vector<longlong>&f){sz_=int(f.size());ft_.assign(sz_,0);for(inti=1;i<sz_;++i){ft......
  • 并查集专题(附并查集模板)P3367 【模板】并查集 P1656 炸铁路
    并查集模板f数组要初始化autofind(autox){if(f[x]==x)returnx;elsereturnf[x]=find(f[x])路径压缩,同一条路上都归到一个点上}voidunionset(autoa,autob){f[find(a)]=find(b);auto会自动适配数据类型} P3367【模板】并查集题目描述如题......
  • C++11标准模板(STL) 算法(std::reverse)
    定义于头文件<algorithm>算法库提供大量用途的函数(例如查找、排序、计数、操作),它们在元素范围上操作。注意范围定义为 [first,last) ,其中 last 指代要查询或修改的最后元素的后一个元素。逆转范围中的元素顺序std::reverse1)反转[first,last)范围中的元素顺序表......
  • golang模板库之fasttemplate
    简介fasttemplate是一个比较简单、易用的小型模板库。fasttemplate的作者valyala另外还开源了不少优秀的库,如大名鼎鼎的fasthttp,前面介绍的bytebufferpool,还有一个重量级的模板库quicktemplate。quicktemplate比标准库中的text/template和html/template要灵活和易用很多,后面会专......
  • platform_driver驱动及设备驱动匹配标识符
    一、设备树platform_driver示例设备树中需要定义一个设备节点,包含设备的相关信息和属性。例如,假设有一个名为"my_device"的设备,其设备树节点可能如下所示:/dts-v1/;/{compatible="example,my_device";my_device{compatible="example,my_device";......
  • 蓝桥杯算法基础(29)字符串匹配(RabinKarp)(KMP)(前缀树,字典树,trie,后缀数组,高度数组)
     RabinKarpRabinKarpS:ABABABm个P:ABBn个1.朴素算法,挨个匹配2.哈希法hash->滚动哈希c0*31^2+c1*31^1+c2类似于进制的求法求hash值(c0*31+c1)*31+c2hash(p)=o(n)hash(s)=o(m*n)privatestaticvoidmatch(Stringp,Strings){longhash_p=hash(p);......
  • opencv 灰度变换(灰度化)
    加权平均值法:D=(R*30+G*59+B*11)/100,其中RGB分别是红,绿,蓝颜色通道的像素值。取最大值法:D=max(R,G,B)平均值法:D=(R+G+B)/3importcv2importnumpyasnpimage=cv2.imread("C:/Users/wangyiyuan/Desktop/20200201172603_hocyy.jpg")h=np.shape(image)[0]w=np.shape(image)......
  • 算法基础模板
    目录算法模版——基础篇1、整数二分2、浮点数二分3、高精度加法4、高精度减法5、高精度乘低精度6、高精度除以低精度7、一维前缀和8、二维前缀和9、一维差分10、二维差分11、位运算12、双指针算法13、离散化14、区间合并15、单链表16、双链表17、栈18、队列1.普通队列2.循环队列......