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,电子工业出版社,李立宗著

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • idea2021激活吗[最新免费获取]

    (idea2021激活吗)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • pycharm中使用anaconda部署python环境_anaconda创建python虚拟环境

    pycharm中使用anaconda部署python环境_anaconda创建python虚拟环境环境配置环境的配置分为三步:配置虚拟环境和安装程序所需要的包以及在pycharm中打开项目配置虚拟环境配置虚拟环境需要通过anaconda来完成,anaconda的下载地址为:https://docs.conda.io/en/latest/miniconda.htmlwindows用户下载python3.8的miniconda即可下载完毕之后双击安装即可,注意一点这些一定要选中程序安装完毕之后打开windows的命令行(cmd),输入condaenvlist,出现下列信息则表示con

  • 怎样用python求平均值_如何用python求平均值【Python教程】,python平均值[通俗易懂]

    进修了Python相干数据类型,函数的学问后,应用字符串的支解完成了输入恣意多个数据,并盘算其平均值的小顺序。思绪是吸收输入的字符串,以空格为分隔符,将支解的数据存入列表(lst1)中,将lst1中的数据转存入另一个空列表(lst)中,转存时将字符串转化为整型,从而应用函数求出lst中数的和、平均值。print(“—–求平均值,可输入恣意多个数——-“)lst=[]#定义一个…

  • 静态方法只能通过类名进行调用_java非静态方法可以调用静态方法吗

    静态方法只能通过类名进行调用_java非静态方法可以调用静态方法吗静态方法调用的三种方式:1、newxx().静态();//使用对象调用,不推荐2、xx.静态();//类名调用,正规调用方法,推荐3、静态();//本类的静态方法在本类调用,直接调用欢迎各位在评论区留言探讨…

    2022年10月28日
  • 计算机cpu的字母,笔记本电脑CPU型号后缀字母HQ、U、Y含义详解

    计算机cpu的字母,笔记本电脑CPU型号后缀字母HQ、U、Y含义详解我们在选购笔记本的时候,可能优先会看CPU是什么型号的,因为CPU的好坏决定了电脑运算速度的好坏,因此CPU选购十分重要。在笔记本中,不少笔记本CPU型号后缀字母可能不同,那么它们代表什么含义呢?今天蝈蝈就来给大家讲讲笔记本CPU型号后缀字母HQ、U、Y含义,希望对你有帮助!Y:超低压,性能很弱功耗很低相比低压CPU,名字中有“Y”的是性能更弱的超低压CPU。在第七代处理器之前,超低压的命名方式为…

  • 移位运算用法总结

    移位运算用法总结位运算总结原文一、位运算应用口诀清零取位要用与,某位置一可用或若要取反和交换,轻轻松松用异或二、移位运算它们都是双目运算符,两个运算分量都是整形,结果也是整形。‘<<’左移:右边空出的位置补0,其值相当于乘以2。‘>>’右移:左边空出的位,如果是正数则补0,若为负数则补0或1,取决于所用的计算机系统OSX中补1。其值相当于除以2。…

发表回复

您的电子邮箱地址不会被公开。

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