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


相关推荐

  • python编写手机app_手机学python的app

    python编写手机app_手机学python的app用程序控制手机,再也不用自己去做重复枯燥的任务了

    2022年8月12日
    4
  • 学生认证,专业版pycharm

    学生认证,专业版pycharm学生认证pycharm学习自https://blog.csdn.net/qq_36667170/article/details/79905198感谢分享以下记录下自己的过程1、https://www.jetbrains.com/pycharm/buy/?fromIDE#discounts?billing=yearly页面现在变成这样了2、选择Forstudentsandteachers下的learnmore3、Applynow4、填写表单,(一定要是教育邮箱,可以在学校

    2022年8月29日
    1
  • 《Java Web从入门到精通》PDF 百度网盘

    《Java Web从入门到精通》PDF 百度网盘http://www.java1234.com/a/javabook/javaweb/2014/1219/3407.html《JavaWeb从入门到精通》PDF下载《JavaWeb从入门到精通》PDF下载下载地址:链接:https://pan.baidu.com/s/1pNj0efh密码:iroa  电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍:《…

    2022年5月16日
    44
  • OpenCV基础——IplImage中的widthStep

    OpenCV基础——IplImage中的widthStepIplImage有两个属性容易导致错误:width和widthStep前者是表示图像的每行像素数,后者指表示存储一行像素需要的字节数。在OpenCV里边,widthStep必须是4的倍数,从而实现字节对齐,有利于提高运算速度。如果8U单通道图像宽度为3,那么widthStep是4,加一个字节补齐。这个图像的一行需要4个字节,只使用前3个,最后一个空着。也就是一个宽3高3的图像的…

    2022年6月11日
    28
  • java环境搭建[通俗易懂]

    java环境搭建[通俗易懂]java环境搭建环境搭建(JDK与eclipse下载安装)目标:掌握Java环境搭建java环境搭建环境搭建(JDK与eclipse下载安装)目标:掌握Java环境搭建一、JDK下载和安装二、eclipse下载和安装三、eclipse常用配置设置四、编写代码一、JDK下载和安装下载:访问官网跳转到官网下载页面选择对应版本点击下载安装:打开安装包,依次点击下一步按其流程安装即可。配置环境变量(1)此电脑右击属性–>找到高级系统设置–>找到

    2022年7月9日
    20
  • UPdate语句

    UPdate语句

    2021年11月9日
    39

发表回复

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

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