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/114456.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • form表单提交的几种方式

    表单提交方式一:直接利用form表单提交html页面代码:<!DOCTYPEhtml><html><head><metacharset=”UTF-8″/><title>Inserttitlehere</title></head><body><formaction=”h…

    2022年4月1日
    56
  • labview噪声发生器_labview示波器显示两个波形

    labview噪声发生器_labview示波器显示两个波形当今的电子元器件与过去相比,开关切换速度更快,斜率(slewrate)更大、每个封装包含的有源针脚数量更多,信号摆动更小。因此,设计者更加关注从手机到服务器等新数字设计中的电源噪声。通常我们使用示波器测量电源噪声。本应用指南举例说明了使用示波器分析电源噪声的各种技术,并讨论了如何选择和评测电源噪声测量工具。现在面临的精准测量的问题随着开关切换速度和信号斜率的升高以及器件上有源针脚数目的…

    2022年10月10日
    3
  • mysql语句截取字符串_sql截取字符串的函数

    mysql语句截取字符串_sql截取字符串的函数今天建视图时,用到了MySQL中的字符串截取,很是方便感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用。函数:1、从左开始截取字符串left(str,length)说明:left(被截取字段,截取长度)例:selectleft(content,200)asabstractfrommy_content_t2、从右开始截…

    2022年10月2日
    3
  • mysql的慢查询日志怎么查看_mysql慢查询优化

    mysql的慢查询日志怎么查看_mysql慢查询优化MySQL数据库,慢查询日志

    2022年10月9日
    2
  • xcode自动签名_配置实用工具也不能移除

    xcode自动签名_配置实用工具也不能移除之前看到过一篇无证做真机测试的文章,很受用~不过因为当时手贱,把默认的“iPhoneDeveloper”签名改成了自己的名字直接导致后来的每一个XCode项目,我想在真机上面看效果都要重新设置签名配置。当然,是可以按照那篇文章把这个名字再修改回来,不过我当时懒,就一直这么弄着了如今经过了那么长的时间,我电脑里面存储的很多工程都沿用了这蛋疼的配置所以一时半会儿

    2022年9月27日
    5

发表回复

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

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