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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker技术入门与精通(2020.12笔记总结)

    docker技术入门与精通(2020.12笔记总结)

    2022年2月17日
    43
  • pygame安装超详细讲解「建议收藏」

    pygame安装超详细讲解「建议收藏」1.进入python官网:https://www.python.org/2.点击PyPI3.输入框输入pygame4.根据顺序依次点击5.根据自己python版本号选择对应的文件6.把下载的whl文件放在python的对应目录下7.回到上一句目录,按住shift然后鼠标点击右键,打开windowsPowerShell命令窗口输入pygame_2048-1.9.4-py3-none-any.whl(这个是你下载的对应版本名)安装过程中出现了两个问题:1)Youareusin

    2022年5月24日
    52
  • OpenCV-Python实战(1)——OpenCV简介与图像处理基础

    OpenCV-Python实战(1)——OpenCV简介与图像处理基础OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时也提供了Python接口,实现了图像处理和计算机视觉方面的很多通用算法。在本文中,将介绍OpenCV库,包括它的主要模块和典型应用场景,同时使用OpenCV-Python实战讲解图像处理基础要点。

    2022年5月13日
    42
  • IDEA使用JDBC连接MySQL数据库详细教程「建议收藏」

    IDEA使用JDBC连接MySQL数据库详细教程「建议收藏」首先需要保证你已经成功安装mysql接下来下载连接MySQL数据库的驱动使用JDBC连接MySQL数据库的驱动为Connentor/J,这里以最新版本的8.0为例解压zip文件,随便解压到一个地方就好,当然作为程序员,需要有好习惯的创建java项目,导入mysql-connector-java-8.0.13.jar包下面再来看下导入jar的步骤写代码//导入包importja…

    2022年7月13日
    47
  • Tracert(traceroute)&Ping 工作原理分析

    Tracert(traceroute)&Ping 工作原理分析一、tracert工作过程分析Tracert命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。首先,tracert送出一个TTL是1的IP数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将TTL减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并送回一个「ICMPtimeexceeded」消息(

    2022年9月24日
    1
  • stream的分组_java快速对list分组

    stream的分组_java快速对list分组Stream流-分组操作文章目录Stream流-分组操作方法1,`groupingBy(Function)`方法2,`groupingBy(Function,Collector)`方法3:`groupingBy(Function,Supplier,Collector)`Collectors.groupingBy()3个方法的使用示例/**员工*@authorYang*@create2020-07-0919:57*/publicclassEmployee{

    2022年10月5日
    2

发表回复

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

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