当前位置: 首页 > news >正文

网站免费源码不用下载公司邮箱密码忘记了怎么办

网站免费源码不用下载,公司邮箱密码忘记了怎么办,如何注销网站备案,网站建设及托管合同模板第15章#xff1a;模板匹配一、模板匹配基础#xff1a;1. cv2.matchTemplate()函数#xff1a;2. 匹配原理#xff1a;3. 查找最值#xff1a;二、多模版匹配#xff1a;1. 获取匹配位置集合#xff1a;2. 循环#xff1a;3.调整坐标4.标记匹配图像的位置​ 模板匹配是… 第15章模板匹配一、模板匹配基础1. cv2.matchTemplate()函数2. 匹配原理3. 查找最值二、多模版匹配1. 获取匹配位置集合2. 循环3.调整坐标4.标记匹配图像的位置​ 模板匹配是指在当前图像A内匹配与图像B最相似的部分一般将图像A称为输入图像将图像B称为模板图像。 模板匹配的方法是将模板图像B在图像A上滑动逐个遍历所有像素以完成匹配。 ​ 例如下图中大图像“lena”是输入图像“眼睛”图像是模板图像。查找的方式是将模板图像在输入图像内从左上角开始滑动逐个像素遍历整幅输入图像以查找与其最匹配的部分。 一、模板匹配基础 1. cv2.matchTemplate()函数 在OpenCV内通过函数cv2.matchTemplate()实现模板匹配。语法格式为 resultcv2.matchTemplate(image,templ,method[,mask]) image为原始图像必须是8位或者32位的浮点型图像。 templ为模板图像。它的尺寸必须小于或等于原始图像并且与原始图像具有同样的类型。 method为匹配方法。该参数通过TemplateMatchModes实现有6种可能的值如表所示。 其具体对应的计算公式 mask 为模板图像掩模。它必须和模板图像 templ 具有相同的类型和大小。通常情况下该值使用默认值即可。当前该参数仅支持TM_SQDIFF和TM_CCORR_NORMED两个值。 函数cv2.matchTemplate()的返回值result 是一个结果集。类型是单通道32位浮点型。是由每个位置的比较结果所构成的。 2. 匹配原理 ​ 如果输入图像(原始图像)尺寸是W * H模板的尺寸是w * h则返回值的大小为(W-w1)*(H-h1)。 在进行模板匹配时模板在原始图像内遍历。在水平方向上 遍历的起始坐标是原始图像左数第1个像素值(序号从1开始)。最后一次比较是当模板图像位于原始图像的最右侧时此时其左上角像素点所在的位置是W-w1。 因此返回值result在水平方向上的大小是W-w1(水平方向上的比较次数)。 在垂直方向上 遍历的起始坐标从原始图像顶端的第1个像素开始。最后一次比较是当模板图像位于原始图像的最下端时此时其左上角像素点所在位置是H-h1。 所以返回值result在垂直方向上的大小是H-h1(垂直方向上的比较次数)。 如果原始图像尺寸是 W * H模板的尺寸是w * h则返回值的大小为(W-w1)* (H-h1)。也就是说模板图像要在输入图像内比较(W-w1)*(H-h1)次。 例如在上图中左上方的2×2小方块是模板图像右下方的10×10图像是输入图像(原始图像)。在进行模板匹配时 首先将模板图像置于输入图像的左上角。模板图像在向右移动时最远只能位于输入图像的最右侧边界处此时模板图像左上角的像素对应着输入图像的第9列(输入图像宽度-模板图像宽度110-219)。模板图像在向下移动时最远只能位于输入图像最下端的边界处。此时模板图像左上角的像素对应着输入图像的第9行(输入图像高度-模板图像高度110-219)。 根据上述分析可知比较结果result的大小满足(W-w1)*(H-h1)在上例中就是(10-21)×(10-21)即9×9。也就是说模板图像要在输入图像内总计比较9×981次这些比较结果将构成一个9×9大小的二维数组。 需要注意的是函数cv2.matchTemplate()通过参数method来决定使用不同的查找方法。对于不同的查找方法返回值result具有不同的含义。例如 method的值为cv2.TM_SQDIFF和cv2.TM_SQDIFF_NORMED时result值为0表示匹配度最好值越大表示匹配度越差。method 的值为 cv2.TM_CCORR、cv2.TM_CCORR_NORMED、cv2.TM_CCOEFF 和cv2.TM_CCOEFF_NORMED时result的值越小表示匹配度越差值越大表示匹配度越好。 查找方法不同结果的判定方式也不同。在查找最佳匹配时首先要确定使用的是何种method然后再确定到底是查找最大值还是查找最小值。 3. 查找最值 查找最值(极值)与最值所在的位置可以使用 cv2.minMaxLoc()函数实现。语法格式如下 minVal,maxVal,minLoc,maxLoccv2.minMaxLoc(src[,mask]) src为单通道数组。minVal为返回的最小值如果没有最小值则可以是NULL(空值)。maxVal为返回的最大值如果没有最小值则可以是NULL。minLoc为最大值的位置如果没有最大值则可以是NULL。maxLoc为最大值的位置如果没有最大值则可以是NULL。mask为用来选取掩模的子集可选项 函数 cv2.minMaxLoc()能够查找整个数组内的最值及它们的位置并且可以根据当前的掩模集来选取特定子集的极值。有关该函数的更多说明及实例请参考第12章。 综上所述函数cv2.matchTemplate()返回值中的最值位置就是模板匹配的位置。 例如当method的值为cv2.TM_SQDIFF和cv2.TM_SQDIFF_NORMED时0表示最佳匹配值越大则表示匹配效果越差。当使用这两种方法时要寻找最小值所在的位置作为最佳匹配。如下语句能够找到cv2.matchTemplate()函数返回值中最小值的位置 minVal,maxVal,minLoc,maxLoccv2.minMaxLoc(matchTemplate函数的返回值) topLeftminLoc # 查找最小值所在的位置 以topLeft点为模板匹配位置的左上角坐标结合模板图像的宽度w和高度h可以确定匹配位置的右下角坐标代码如下所示 bottomRight(topLeft[0]w,topLeft[1]h)  #w和h是模板图像的宽度和高度 当 method 的值为 cv2.TM_CCORR、cv2.TM_CCORR_NORMED、cv2.TM_CCOEFF 和cv2.TM_CCOEFF_NORMED时cv2.matchTemplate()函数的返回值越小表示匹配度越差而返回值越大则表示匹配度越好。此时要寻找最大值所在的位置作为最佳匹配。 通过上述方式我们确定了模板匹配的矩形对角坐标位置接下来可以借助函数cv2.rectangle()将该位置用白色标记出来。 函数cv2.rectangle的语法格式为 Imgcv.rectangle(img,pt1,pt2,color[,thickness]) img表示要标记的目标图像。pt1是矩形的顶点。pt2是pt1的对角顶点。color是要绘制矩形的颜色或灰度级(灰度图像)。thickness是矩形边线的宽度。 因此使用的标记语句为cv2.rectangle(img,topLeft,bottomRight,255,2) import cv2 import numpy as np import matplotlib.pyplot as pltimg cv2.imread(../lena.bmp) template cv2.imread(../template.bmp)th, tw template.shape[:2] rv cv2.matchTemplate(img, template, cv2.TM_SQDIFF) min_val, max_val, min_loc, max_loc cv2.minMaxLoc(rv)top_left min_loc bottom_right (top_left[0] tw, top_left[1] th) new_img img.copy() cv2.rectangle(new_img, top_left, bottom_right, 255, 2)plt.subplot(131) plt.imshow(template, cmapgray) plt.title(template) plt.axis(off)plt.subplot(132) plt.imshow(rv, cmapgray) plt.title(matcing result) plt.axis(off)plt.subplot(133) plt.imshow(new_img, cmapgray) plt.title(result) plt.axis(off)plt.show()二、多模版匹配 前面的例子中我们在输入图像lena中搜索其眼部子图该子图在整个输入图像内仅出现了一次。但是有些情况下要搜索的模板图像很可能在输入图像内出现了多次这时就需要找出多个匹配结果。而函数 cv2.minMaxLoc()仅仅能够找出最值无法给出所有匹配区域的位置信息。所以要想匹配多个结果使用函数 cv2.minMaxLoc()是无法实现的需要利用阈值进行处理来获取所有匹配的集合。 1. 获取匹配位置集合 numpy模块中的函数where()能够获取模板匹配位置的集合。对于不同的输入其返回的值是不同的。 当输入(参数)是一维数组时返回值是一维索引只有一组索引数组。当输入是二维数组时返回的是匹配值的位置索引因此会有两组索引数组表示返回值的位置。 例如 # 当输入数组是一维时 import numpy as npanp.array([3,6,8,1,2,88]) bnp.where(a5) print(b)# 输出结果 (array([1,2,5],dtypeint64),)# 当输入数组是二维时 import numpy as npamnp.array([[3,6,8,77,66],[1,2,88,3,98],[11,2,67,5,2]]) bnp.where(am5) print(b)# 输出结果 (array([0,0,0,0,1,1,2,2],dtypeint64), array([1,2,3,4,2,4,0,2],dtypeint64))综上所述函数 np.where()可以找出在函数 cv2.matchTemplate()的返回值中哪些位置上的值是大于阈值threshold的。 具体实现时可以采用的语句为 locnp.where(res threshold) res是函数cv2.matchTemplate()进行模板匹配后的返回值。threshold是预设的阈值loc是满足“res threshold”的像素点的索引集合。 2. 循环 处理多个值通常需要用到循环。因此在获取匹配值的索引集合后可以采用如下语句遍历所有匹配的位置对这些位置做标记 for i in 匹配位置集合 ​ 标记匹配位置。 在循环处理匹配位置的时候可以在循环中使用函数zip() 函数zip()用可迭代的对象作为参数将对象中对应的元素打包成一个个元组然后返回由这些元组组成的列表。 例如 import numpy as npam np.random.randint(0, 50, size(3, 5)) print(am) b np.where(am 20) print(b) for i in zip(*b):print(i)# 输出结果 [[37 39 43 48 49][16 48 37 23 25][44 40 0 44 38]] (array([0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtypeint64), array([0, 1, 2, 3, 4, 1, 2, 3, 4, 0, 1, 3, 4], dtypeint64)) (0, 0) (0, 1) (0, 2) (0, 3) (0, 4) (1, 1) (1, 2) (1, 3) (1, 4) (2, 0) (2, 1) (2, 3) (2, 4)因此如果希望循环遍历由np.where()返回的模板匹配索引集合可以采用的语句为 for i in zip(*模板匹配索引集合): ​ 标记处理 3.调整坐标 函数 numpy.where()可以获取满足条件的模板匹配位置集合然后可以使用函数cv2.rectangle()在上述匹配位置绘制矩形来标注匹配位置。 使用函数numpy.where()在函数cv2.matchTemplate()的输出值中查找指定值得到的形式为“(行号列号)”的位置索引。但是**函数cv2.rectangle()中用于指定顶点的参数所使用的是形式为“(列号行号)”的位置索引。**所以在使用函数cv2.rectangle()绘制矩形前要先将函数numpy.where()得到的位置索引做“行列互换”。可以使用如下语句实现loc内行列位置的互换 loc[::-1] 4.标记匹配图像的位置 函数cv2.rectangle()可以标记匹配图像的具体位置分别指定要标记的原始图像、对角顶点、颜色、矩形边线宽度即可。 关于矩形的对角顶点 其中的一个对角顶点A可以通过for循环语句从确定的满足条件的“匹配位置集合”内获取。 另外一个对角顶点可以通过顶点A的位置与模板的宽(w)和高(h)进行运算得到。 因此标记各个匹配位置的语句为 for i in 匹配位置集合: ​ cv2.rectangle(输入图像i, (i[0] w, i[1] h ), 255, 2) import cv2 import numpy as np import matplotlib.pyplot as pltimg cv2.imread(../four_lena.bmp) template cv2.imread(../template.bmp)h, w template.shape[:2] rst cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED) print(rst) threshold 0.99 loc np.where(rst threshold) new_img img.copy() for pt in zip(*loc):cv2.rectangle(new_img, pt, (pt[0] w, pt[1] h), 255, 1)plt.subplot(121) plt.imshow(template, cmapgray) plt.title(template) plt.axis(off)plt.subplot(122) plt.imshow(new_img, cmapgray) plt.title(rst) plt.axis(off)plt.show()
http://www.huolong8.cn/news/302071/

相关文章:

  • 南昌网站优化公司阿里云虚拟主机购买
  • 移动建站公司怎么提升网站流量
  • 论坛程序做导航网站怎么做网站架构图
  • 陕西网站制作qq群深圳网站设计制
  • 行业网站方案建站仅向商家提供技术服务
  • 网站更新怎么做公司策划是做什么的
  • 网站开发技术一般需要什么语言网站反链有好处吗
  • 一站式建站价格网站做nat映射需要哪些端口
  • 网站logo如何修改汉化wordpress 购物
  • 留电话的广告网站网站建设必须注意的事项
  • 专业的门户网站建设局域网建设网站视频教程
  • 百度下拉框推广网站销售型企业网站建设应遵守的原则
  • 淮安市哪里可以做网站手机网站宽度多少合适
  • 城市建设网站调查问卷相城苏州网站建设
  • 周年庆网站要怎么做6阿里云备案 网站备案域名
  • 美妆网站设计模板网站开发语言占有率
  • 关键词分析工具网站优化策略
  • 苏州工程网站建设做视频推广有哪几个网站
  • 对话弹窗在网站上浮动用ps做衣服网站首页
  • 站长工具问答网站怎么看一个网站是用模板什么做的
  • 无锡找做网站建立数据库连接时出错wordpress
  • 建筑网站设计模版男人女人做那个网站
  • 公司在选择网站时应考虑什么软件生成器
  • 义乌做网站哪家好网站开发技术期中试题
  • 嘉兴网站建设方案优化dede网站模板下载
  • 网站建设价格与哪些江象网站建设
  • 误入网站退不了怎么做手机界面设计
  • 网站建设策划范文顾问
  • 网站开发 前台代码学前端有必要找培训机构吗
  • 侨联 文化宣传 侨联网站建设在哪个网站上找国外客户做外贸