1. 首页 > 数码 >

opencv模板匹配 OpenCV模板匹配二维码

使用OpenCV进行模板匹配(原图-模板图)

匹配算法有很多,比如最简单的对比原图和模板图的像素值。

opencv模板匹配 OpenCV模板匹配二维码opencv模板匹配 OpenCV模板匹配二维码


但是这种方法稍微有一点旋转和光照变化结果就会很差。

为了改进这个,有了SAD算法。

然后SAD相似的SSD。

再然后是计算区域互相关性的NCC算法。

以上三种算法中,SAD算法最简单,因此当模板大小确定后,SAD算法的速度最快。NCC算法与SAD算法相比要复杂得多。

至于算法的过程,这三个算法都是很好理解的算法,我觉得还是自学比较好。

opencv 中自带的模板匹配算法出处

方法如下:

使用OPENCV下SIFT库做图像匹配的例程

// opencv_empty_proj.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include

#include

#include

#include

#include

using namespace std;

using namespace cv;

int _tmain(int argc, _TCHAR* argv[])

{const char* imagename = "img.jpg";

//从文件中读入图像

Mat img = imread(imagename);

Mat img2=imread("img2.jpg");

//如果读入图像失败

if(img.empty())

{fprintf(stderr, "Can not load image %s\n", imagename);

return -1;

}if(img2.empty())

{fprintf(stderr, "Can not load image %s\n", imagename);

return -1;

}//显示图像

imshow("image before", img);

imshow("image2 before",img2);

//sift特征检测

SiftFeatureDetector siftdtc;

vectorkp1,kp2;

siftdtc.detect(img,kp1);

Mat outimg1;

drawKeypoints(img,kp1,outimg1);

imshow("image1 keypoints",outimg1);

KeyPoint kp;

vector::iterator itvc;

for(itvc=kp1.begin();itvc!=kp1.end();itvc++)

{cout<<"angle:"<angle<<"\t"<class_id<<"\t"<octave<<"\t"<pt<<"\t"<response<

}siftdtc.detect(img2,kp2);

Mat outimg2;

drawKeypoints(img2,kp2,outimg2);

imshow("image2 keypoints",outimg2);

SiftDescriptorExtractor extractor;

Mat descriptor1,descriptor2;

BruteForceMatcher> matcher;

vector matches;

Mat "desc",descriptor1);

cout<

matcher.match(descriptor1,descriptor2,matches);

drawMatches(img,kp1,img2,kp2,matches,img_matches);

imshow("matches",img_matches);

//此函数等待按键,按键盘任意键就返回

waitKey();

return 0;

}

1984.A Goshtasby et al."A Two-Stage Cross Correlation Approach to Template Matching"

2001.K Briechle, UD Hanebeck"Template Matching using Fast Normalized Cross Correlation"

论文电子版在附件里。

opencv(C++)GPU、CPU 模板匹配

本文主要关注opencv常规版和cuda版的模板匹配算法,网上cuda版的资料不多,这里做个记录,以后用到也好有个参考。

@[toc]

opencv cuda版需要自己用cmake编译,编译过程并不复杂,cmake编译成vs的项目,然后用vs编译成opencv_worldXXX.dll.编译过程可参考 link1 , link2

GPU加速模板匹配看起来效果并不是很好,测试了不同大小的图片有的情况速度会超过CPU,本来觉得应该会有几倍的加速效果,但是其实并没有,大多数情况下反而是变慢了。开始觉得是cpu向gpu传图的过程耗时较多,后面去掉传图的过程只看匹配过程,它的计算就是比cpu的慢,不知道是不是因为这块GPU太低端了。

模板匹配概述

模板匹配是通过一张模板图片去另一张图中找到与模板相似部分的一种算法。一个模板是一张小图片,这个图片有一定的尺寸,有角度(一般是不旋转的矩形, 角度为0)。

模板匹配算法一般是通过滑窗的方式在待匹配的图像上滑动,通过比较模板与子图的相似度,找到相似度最大的子图。这种算法最核心部分在于如何设计一个相似性函数。

最容易想到的一个相似性函数便是欧式距离:

将这个相似性函数展开,可以得:

可以看出,只有第二项是有意义的,因为第一项和第三项的值在选定模板后是固定的。对于欧式距离相似函数,值越大表示越不相似,也就是说,第二项的值越小则越不相似。

将第二项进行归一化:

那么当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

模板大小:126x96 png

匹配图像大小:750x407 jpg

特征提取时间:0.15 s

KNN匹配时间:0.0024s

匹配效果:

javaopencv模板匹配多个

首先打开2个excel表格(),会发现这两个excel表格的A列是相同类型的,都是”百度ID号“,不同的是表格1有经验数量和财富值,而表格2有的是最近拿好经验红包的数量,现在就是需要把2个excel合并成一个表格。

2.现在表格1的D列写上需要导入数据的列标题,或者直接从表格2中复制-粘贴过来也行

3.然后将鼠标移动到D列的第二行,打开菜单栏的”公式“选项,在公式的工具中找到”插入函数“并点击。

4.在插入函数窗页面,在搜索函数框中输入”vlookup"然后转到,在出现的结果函数中,点击vlookup函数,然后点确定。(

5.弹出来的函数参数中,在第一个填写框vlookup_value中直接点击A2的”张一”。

6.在第二个填写框Table_array中全选表格2,表格2中A列和B列都包含

尊敬的用户,使用JavaOpenCV进行模板匹配时,可以使用matchTemplate()方法一次性进行多个模板的匹配,并可以选择不同的比较方式(如相关性,卡方等)。

OpenCV - 滑动拼图验证码自动识别与匹配

体验地址:

1、抓包获取前景图和背景图

2、计算前景图非透明区域的边界

计算方法: Python 图像处理:计算 PNG 非透明区域最小外接矩形

3、裁切前景图和背景图

背景图中两个相似块,以前景图的非透明边界去横切背景图,能排除干扰项

4、高斯滤波与边缘检测

为了提升图像匹配的准确性,使用高斯滤波与边缘检测算法,对图像预处理

5、模板匹配

使用 OpenCV 的 matchTemplate 匹配相似位置

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 12345678@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息