python+opencv图像模板匹配—多模板匹配

python+opencv图像模板匹配—多模板匹配

一、多模板匹配

在实际生活中,要搜索的模板图像很有可能在图像中出现多次,这个时候就需要多次匹配结果,上文提到的函数cv2.minMaxLoc()只能找到最值及位置,无法匹配多个信息,因此设计过程进行多次匹配。

二、匹配过程

(1)获取匹配位置

利用np.where函数可以找出满足条件索引值

import numpy as np
#给定任意矩阵
a=np.array([3,6,8,1,2,88])
#选择出矩阵中大于5的数值的索引
b=np.where(a>5)
print(b)

结果

(array([1, 2, 5], dtype=int64),)

(2)循环

因为要处理多个数据,需要用到循环关系,常见的循环用到的for或者while,在博主的其他文章中也有所涉及,如果存在不会请移步去学习。
python初级:基础知识学习-循环、列表、元组、集合、字典https://blog.csdn.net/wp215501547/article/details/117361476?spm=1001.2014.3001.5501
这次主要涉及到一个新函数zip()
**zip()**将对象中对应的元素打包成一个个元组,然后返回这些元组组成的列表

x=[1,2,3]
y=[4,5,6]
z=[7,8,9]
t=(x,y,z)
print(t)
for i in zip(*t):
    print(i)

结果

([1, 2, 3], [4, 5, 6], [7, 8, 9])
(1, 4, 7)
(2, 5, 8)
(3, 6, 9)
import numpy as np
am=np.array([[3,6,8,77,66],[1,2,88,3,98],[11,2,67,5,2]])
print(am)
b=np.where(am>5)
for i in zip(*b):
    print(i)

结果:

[[ 3  6  8 77 66]
 [ 1  2 88  3 98]
 [11  2 67  5  2]]
(0, 1)
(0, 2)
(0, 3)
(0, 4)
(1, 2)
(1, 4)
(2, 0)
(2, 2)

(3)调整坐标

进行坐标的行列互换

loc=([1,2,3,4],[11,12,13,14])
print(loc)
print(loc[::-1])

结果

([1, 2, 3, 4], [11, 12, 13, 14])
([11, 12, 13, 14], [1, 2, 3, 4])

(4)标记匹配图像位置

利用cv2.rectangle()标记图像具体位置

cv2.rectangle(img ,x,y,colour,line)
img: 图像
x:起始点
y:终点(起始点的对角点)
colour:颜色
line:线条粗细	

三、代码演示

import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('E:/Literature/material/6_11.jpg',0)
template=cv2.imread('E:/Literature/material/6_11_1.jpg',0)

w,h=template.shape[::-1]

res=cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)
print(res)

threshold=0.9
loc=np.where(res>=threshold)
print(loc)
for pt in zip(*loc[::-1]):
    cv2.rectangle(img,pt,(pt[0]+w,pt[1]+h),255,3)

plt.imshow(img,cmap='gray')
plt.xticks([]),plt.yticks([])
plt.show()
[[ 0.12059908  0.09813836  0.09739019 ...  0.03928253  0.03882339
   0.03929812]
 [ 0.1135476   0.08880164  0.08768394 ...  0.03025172  0.02909074
   0.03022301]
 [ 0.10448074  0.07675777  0.07575679 ...  0.02096571  0.01981555
   0.02131838]
 ...
 [-0.0055013  -0.02686769 -0.02247263 ...  0.29248947  0.29297742
   0.29329336]
 [-0.01761664 -0.03848638 -0.03440642 ...  0.26776022  0.26913023
   0.27004105]
 [-0.03042962 -0.05165558 -0.04673047 ...  0.24571162  0.24762924
   0.2489468 ]]
(array([238, 242], dtype=int64), array([ 464, 1127], dtype=int64))

在这里插入图片描述

四、参考文献

Opencv轻松入门,面向python,电子工业出版社,李立宗著

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114467.html原文链接:https://javaforall.net

(0)
上一篇 2021年10月6日 下午1:00
下一篇 2021年10月6日 下午2:00


相关推荐

  • 电脑快速切换ip软件(好用的换ip软件)

    切换IP软件,切换电脑手机IP如此简单大家在工作和生活中肯定会时不时遇到需要换IP的情况,为了预防需要换IP的时候束手无策,小编在此给大家介绍一款专门用来换IP的软件。打开搜索引擎,不管是百度,狗搜还是360,只要在上面搜索“换IP软件”,立马就会出现非常多的换IP的品牌,有免费的也有付费的,功能都没什么区别,就是换IP。卖IP的这么多,说明换IP的市场还是非常大的!不管你是做什么行业,网络推…

    2022年4月18日
    84
  • gateway网关详解_网关和网桥的定义

    gateway网关详解_网关和网桥的定义3.5.Gateway网关的概念之前的操作,我们有了管理他的配置中心和注册中心。下一步我们就要配置网关了。于是,问题就要回到什么是网关?以及为什么要配置网关上来了。先聊聊为什么要配置网关。注册中心相当于对各种服务进行调度,把他们安排的明明白白的。但注册中心能力再打,他也没办法安置前端的请求,让他们一一入座,也没办法对一些恶意请求进行拦截。问题就出现了,前端服务此时只能自己在配置里改变请求的位置,而且,每次改变请求就要更改配置,重新上线。恶意请求也无法拦截。这显然是不合理的。于是,网关出现了。

    2022年10月11日
    5
  • java- string转成 json[通俗易懂]

    java- string转成 json[通俗易懂]1,Stringoutput=FileUtils.ReadFile(url);System.out.println(output);JSONArrayjsonArray=JSONObject.parseArray(output);returnjsonArray;2,https://blog.csdn.net/javaQQ56148…

    2022年6月3日
    141
  • Uniapp中onShow()的应用

    Uniapp中onShow()的应用遇到问题:在使用一些变量进行判断时,用完一次开始下一次判断时,结果会跟前一次一样,比如门禁中第一个房子打开后,切换到另外的房子,结果返回结果跟第一个房子一样。原因分析:用于使用了相同的变量进行判断,然而在第一次执行完后,并没有把变量重新初始化,导致页面在第二次加载的时候,显示的结果跟第一次一样。解决方法:在onShow()里面,通过一些参数,判断在切换页面的时候,有没有切换房屋,如果房屋没变的话,切换页面时就不用重新初始化变量。如果房屋改变了,就把变量重新初始化。总结:.

    2022年6月21日
    106
  • mac全选文字的快捷键_Mac文本的快捷键 你晓得否?

    mac全选文字的快捷键_Mac文本的快捷键 你晓得否?我们在MAC电脑上码字的时候,经常会遇到需要对某段文字进行修改或者操作的情况,相信很多人的做法是用鼠标去移动光标快速定位,如果字数篇幅比较小也是可以的,但是如果遇到大篇幅的文章,一点点的用鼠标去找会非常麻烦,今天我就教大家几个MAC文本快捷键,让你在最短的时间内把光标移动到你想要的位置,提高在电脑上码字的效率。1、全文&段落定位目标位置比较远的时候,需要对光标远程定位,下面的组合键可以帮到…

    2022年5月9日
    116
  • 模型压缩Distiller学习

    模型压缩Distiller学习摘要在神经网络模型中 通过正则化或剪枝来诱导稀疏性是压缩网络的一种方法 量化是另一种方法 稀疏神经网络具有速度快 体积小和能量大的优点

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号