【python opencv】模板匹配

编程之家收集整理的这篇文章主要介绍了【python opencv】模板匹配编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

目标

@H_502_2@在本章中,您将学习 - 使用模板匹配在图像中查找对象 - 你将看到以下功能cv.matchTemplate(),cv.minMaxLoc()

理论

@H_502_2@模板匹配是一种用于在较大图像中搜索和查找模板图像位置的方法。为此,OpenCV带有一个函数**cv.matchTemplate**()。 它只是将模板图​​像滑动到输入图像上(就像在2D卷积中一样),然后在模板图像下比较模板和输入图像的拼图。 OpenCV中实现了几种比较方法。(您可以检查文档以了解更多详细信息)。它返回一个灰度图像,其中每个像素表示该像素的邻域与模板匹配的程度。

@H_502_2@如果输入图像的大小为(WxH),而模板图像的大小为(wxh),则输出图像的大小将为(W-w + 1,H-h + 1)。得到结果后,可以使用**cv.minMaxLoc**()函数查找最大/最小值在哪。将其作为矩形的左上角,并以(w,h)作为矩形的宽度和高度。该矩形是您模板的区域。

@H_502_2@注意 如果使用**cv.TM_SQDIFF**作为比较方法,则最小值提供最佳匹配。

OpenCV中的模板匹配

@H_502_2@作为示例,我们将在梅西的照片中搜索他的脸。所以我创建了一个模板,如下所示: 

 我们将尝试所有比较方法,以便我们可以看到它们的结果如何:

import cv2 as cv
 numpy as np
from matplotlib  pyplot as plt
img = cv.imread('梅西.jpg',0)
img2 = img.copy()
template = cv.imread(模板.jpg]
# 列表中所有的6种比较方法
methods = [cv.TM_CCOEFF',cv.TM_CCOEFF_NORMEDcv.TM_CCORRcv.TM_CCORR_NORMEDcv.TM_SQDIFFcv.TM_SQDIFF_NORMEDfor meth in methods:
    img = img2.copy()
    method = eval(meth)
     应用模板匹配
    res = cv.matchTemplate(img,template,method)
    min_val,max_val,min_loc,max_loc = cv.minMaxLoc(res)
     如果方法是TM_SQDIFF或TM_SQDIFF_NORMED,则取最小值
    if method  [cv.TM_SQDIFF,cv.TM_SQDIFF_NORMED]:
        top_left = min_loc
    else:
        top_left = max_loc
    bottom_right = (top_left[0] + w,top_left[1] + h)
    cv.rectangle(img,top_left,bottom_right,255,2)
    plt.subplot(121),plt.imshow(res,cmap = gray)
    plt.title(Matching Result),plt.xticks([]),plt.yticks([])
    plt.subplot(122),plt.imshow(img,1)">Detected Point502_2@

@H_502_2@

@H_502_2@

@H_502_2@您会看到,使用**cv.TM_CCORR**的结果并不理想。

多对象的模板匹配

@H_502_2@在上一节中,我们在图像中搜索了梅西的脸,该脸在图像中仅出现一次。假设您正在搜索具有多次出现的对象,则**cv.minMaxLoc**()不会为您提供所有位置。在这种情况下,我们将使用阈值化。因此,在此示例中,我们将使用著名游戏**Mario**的屏幕截图,并在其中找到硬币。

 pyplot as plt
img_rgb = cv.imread(mario.png)
img_gray = cv.cvtColor(img_rgb,cv.COLOR_BGR2GRAY)
template = cv.imread(mario_coin.png]
res = cv.matchTemplate(img_gray,cv.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
    cv.rectangle(img_rgb,pt,(pt[0] + w,pt[1] + h),(0,255),1)">)
cv.imwrite(res.png502_2@

@H_502_2@ 

@H_502_2@ 

@H_502_2@ 

@H_502_2@参考:http://woshicver.com/FifthSection/4_12_%E6%A8%A1%E6%9D%BF%E5%8C%B9%E9%85%8D/

总结

以上是编程之家为你收集整理的【python opencv】模板匹配全部内容,希望文章能够帮你解决【python opencv】模板匹配所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478

猜你在找的Python相关文章

Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。 安装xlrd pip install xlrd 简单的表格读取
2019年7月3日早上,在百度AI开发者大会上,一个来自山西的青年,将一瓶矿泉水浇在了同样来自山西的李彦宏身上。 可以回顾一下 https://b23.tv/av57665929/p1 ,着实让人一惊
itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。 开源地址 https://github.com/littlecodersh/ItChat 文档: https://itc
Socket有一个缓冲区,缓冲区是一个流,先进先出,发送和取出的可自定义大小的,如果取出的数据未取完缓冲区,则可能存在数据怠慢。其中【recv(1024)】表示从缓冲区里取最大为1024个字节,但实际
ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。 本质上,它是一个简洁的key-value存储系统。 其主要用途有:动态数据库缓存、不同应用(语言)中共享数据 安装 安装及命令介绍
如果使用pymysql,则可以在view中直接import pymysql进行操作,与原操作无区别 Django数据库框架支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在s
使用原生SQL语句进行对数据库操作,可完成数据库表的建立和删除,及数据表内容的增删改查操作等。其可操作性很强,如可以直接使用“show databases”、“show tables”等语句进行表格之
类即是一个模型,根据模型建立起不同的对象,对象间拥有共同的一些属性 简单的类: 类变量和实例变量: 类变量: 类及所有实例共享变量,推荐使用方法是 【类名.变量名】 实例变量(self.变量名): 只
Python的进程和线程是使用的操作系统的原生线程和进程,其是去调用操作系统的相应接口实现 进程:之间不可直接共享数据,是资源的集合,进程必须有一个线程 线程:基于进程,之间可直接共享数据,可执行,只
页面跳转 页面跳转的url中必须在最后会自动添加【】,所以在urls.py的路由表中需要对应添加【】 本地跳转需要参考urls.py的路由表 Cookie 设置cookie 获取cookie 删除
存储系统数据缓存一般会使用三个模块:Mongodb,redis,memcache。其中memcache是轻量级缓存,只能将数据保存到内存中,redis可以配置数据保存在内存还是硬盘。 其主要用途有:不