模板匹配函数python python 模板函数

python模板匹配比例问题怎么解决如果只是单个目标的匹配,那只需要取相似度最大值所在的位置就可以得出匹配位置;\n如果要匹配多个目标 , 那就设定一个阈值,就是说,只要相似度大于比如0.8,就认为是要匹配的目标 。
模板匹配概述 模板匹配是通过一张模板图片去另一张图中找到与模板相似部分的一种算法 。一个模板是一张小图片模板匹配函数python,这个图片有一定的尺寸,有角度(一般是不旋转的矩形,角度为0) 。
模板匹配算法一般是通过滑窗的方式在待匹配的图像上滑动,通过比较模板与子图的相似度,找到相似度最大的子图 。这种算法最核心部分在于如何设计一个相似性函数 。
最容易想到的一个相似性函数便是欧式距离模板匹配函数python:
将这个相似性函数展开,可以得:
【模板匹配函数python python 模板函数】 可以看出 , 只有第二项是有意义的,因为第一项和第三项的值在选定模板后是固定的 。对于欧式距离相似函数,值越大表示越不相似,也就是说,第二项的值越小则越不相似 。
将第二项进行归一化:
那么当R(i, j)为1时 , 表示模板与子图完全相等 。
cv::matchTemplate(const CvArr* image, //欲搜索的图像 。它应该是单通道、8-比特或32-比特 浮点数图像
const CvArr* template,//搜索模板,不能大于输入图像,且与输入图像具有一样的数据类型
CvArr* result, //比较结果的映射图像 。单通道、32-比特浮点数.
若图像是W×H而templ是w×h,则result一定是(W-w+1)×(H-h+1)
int method//CV_TM_SQDIFF、CV_TM_SQDIFF_NORMED、CV_TM_CCORR、
CV_TM_CCORR_NORMED、CV_TM_CCOEFF、CV_TM_CCOEFF_NORMED
);
函数来进行模板匹配 。其中的method参数具体如下:
在通过matchTemplate函数进行模板匹配后,可以得到一个映射图,这张图中最大值的地方便是匹配度最大的子图的左上角坐标,可以使用cv::minMaxLoc函数获得子图位置和相应分数 , 再进行后续操作 。
使用传统的模板匹配速度较快 , 但是无法应对旋转和缩放问题 。要解决旋转不变的 问题 , 必须要得到旋转不变的特征量,例如特征点 。
使用SIFT或SURF计算得到模板和待匹配图像的特征点,然后使用RANSAC或者FLANN进行特征点匹配,最后进行仿射变换便可得到匹配的位置 。
python opencv实现(surf):
# - - coding:utf-8 - -
author= 'Microcosm'
运行的具体信息如下:
操作系统:ubuntu 14.04
运行环境:
opencv版本:opencv 3.0
模板大?。?26x96 png
匹配图像大?。?50x407 jpg
特征提取时间:0.15 s
KNN匹配时间:0.0024s
匹配效果:
opencv的模板匹配如何计算置信度?Opencv模板匹配函数里面包含了匹配的置信度:
img_rgb = cv2.imread('mario.jpg') 。
img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY) 。
template = cv2.imread('mario_coin.jpg', 0) 。
h, w =template.shape[:2] 。
# res里面包含的是匹配的置信度 。
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED) 。
threshold = 0.8 。
# 取匹配程度大于0.8的坐标 。
loc = np.where(res = threshold) 。
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上 。
它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成 , 同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法 。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用 , 并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持 。

推荐阅读