opencv 模板匹配(cvMatchTemplate)

opencv 模板匹配(cvMatchTemplate)   

       模板匹配是通过在输入图像上滑动模板图像块对实际的图像块和输入图像进行匹配,并且可以利用函数cvMinMaxLoc()找到最佳匹配的位置。例如在工业应用中,可以锁定图像中零部件的位置,并根据具体的位置,进行具体的处理。匹配的过程中可以使用不同的method,通过最合适的method,进行最合适的匹配。


MatchTemplate

      比较模板和重叠的图像区域

void cvMatchTemplate( const CvArr* image,const CvArr* templ, CvArr* result, int method );
image      欲搜索的图像。它应该是单通道、8-比特或32-比特 浮点数图像templ      搜索模板,不能大于输入图像,且与输入图像具有一样的数据类型result      比较结果的映射图像。单通道、32-比特浮点数. 如果图像是 W×H 而 templ 是 w×h ,则 result 一定是 (W-w+1)×(H-h+1).method   指定匹配方法:

       函数 cvMatchTemplate 与函数 cvCalcBackProjectPatch 类似。它滑动过整个图像 image, 用指定方法比较 templ 与图像尺寸为 w×h 的重叠区域,并且将比较结果存到 result 中。 下面是不同的比较方法,可以使用其中的一种 (I 表示图像,T - 模板, R - 结果. 模板与图像重叠区域 x'=0..w-1, y'=0..h-1 之间求和):


OpenCV模板匹配算法.可用的方法有6个:


平方差匹配method=CV_TM_SQDIFF,这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大.

标准平方差匹配method=CV_TM_SQDIFF_NORMED

相关匹配method=CV_TM_CCORR,这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.


标准相关匹配method=CV_TM_CCORR_NORMED

相关系数匹配method=CV_TM_CCOEFF。这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列).

在这里

标准相关系数匹配method=CV_TM_CCOEFF_NORMED





     通常,随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越来越准确的匹配(同时也意味着越来越大的计算代价).最好的办法是对所有这些设置多做一些测试实验,以便为自己的应用选择同时兼顾速度和精度的最佳方案.

       通过使用 cvMinMaxLoc函数,我们确定结果矩阵 R 的最大值和最小值的位置。函数中的参数有:

double minVal; double maxVal; Point minLoc; Point maxLoc;
Point matchLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
    result: 匹配结果矩阵
    &minVal 和 &maxVal: 在矩阵 result 中存储的最小值和最大值。该值是矩阵中的最大值和最小值。
    &minLoc 和 &maxLoc: 在结果矩阵中最小值和最大值的坐标.
    Mat(): 可选的掩模



代码如下(输出待寻找模板的位置坐标,以及相似度值):

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <string>using namespace cv;
using namespace std;#include "cv.h"
#include "highgui.h"#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>int main(int argc, char** argv){IplImage *src, *temp1, *ftmp;//读入模板图像  temp1 = cvLoadImage(argv[1], 1);//读入源图像  src = cvLoadImage(argv[2], 1);int iwidth = src->width - temp1->width + 1;int iheight = src->height - temp1->height + 1;ftmp = cvCreateImage(cvSize(iwidth, iheight), 32, 1);double min_val;double max_val;CvPoint min_loc;CvPoint max_loc;cvMatchTemplate(src, temp1, ftmp, CV_TM_SQDIFF);cvMinMaxLoc(ftmp, &min_val, &max_val, &min_loc, &max_loc, NULL);cvRectangle(src, cvPoint(min_loc.x, min_loc.y), cvPoint((min_loc.x + temp1->width), (min_loc.y + temp1->height)), CV_RGB(0, 255, 0), 1);cvNamedWindow("src", 1);cvShowImage("src", src);printf("x_location=%d;y_location=%d", min_loc.x, min_loc.y);printf("min_val=%d;max_val=%d", min_val, max_val);cvWaitKey(0);return 0;
}


待搜寻的图:




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[BZOJ1880] [Sdoi2009] Elaxia的路线 (SPFA 拓扑排序)

Description 最近&#xff0c;Elaxia和w**的关系特别好&#xff0c;他们很想整天在一起&#xff0c;但是大学的学习太紧张了&#xff0c;他们 必须合理地安排两个人在一起的时间。Elaxia和w**每天都要奔波于宿舍和实验室之间&#xff0c;他们 希望在节约时间的前提下&#xff0…

用OPENCV视觉解数独

用OPENCV视觉解数独 2010-06-29 看到增强视觉网站上介绍老外用视觉解SUDOKU(http://www.cvchina.info/2011/05/29/video-sudoku-solver/)&#xff0c;觉得应该不难&#xff0c;于是用OPENCV和训练好的数字分类器&#xff0c;也试着做一个&#xff0c;纯属娱乐 基本思路如下&…

第三次毕业设计任务书

一. 进度计划 时间 计划进度 3.24-3.30 尝试将kdd数据预处理用代码实现 3.31-4.6 将kdd数据预处理用代码实现以及与aprior算法的结合 二. 课题需求 2.1 数据预处理的功能和主要方法 在现实中,由于数据的来源、组织、存储等的多样性,海量的原始数据中一般都很难避免“脏数据…

JMS-activMq与spring进行整合

对JMS做了一个简要介绍之后&#xff0c;接下来就讲一下Spring整合JMS的具体过程。JMS只是一个标准&#xff0c;真正在使用它的时候我们需要有它的具体实现&#xff0c;这里我们就使用Apache的activeMQ来作为它的实现。所使用的依赖利用Maven来进行管理&#xff0c;具体依赖如下…

CSS层叠样式表

HTML主要控制内容 CSS主要控制格式。 样式表是用来指定样式信息的句法机制。 之所以将CSS称为层叠样式表&#xff0c;是因为它可以在3个层次上进行定义。 内联样式表 内联样式表位于开始标签中&#xff0c;其设置只对该元素起作用 文档样式表 文档样式表位于文档的头部区域&…

对X264/FFMPEG架构探讨---感觉不错

3. FFMPEG架构分析FFMPEG是目前被应用最广泛的编解码软件库&#xff0c;支持多种流行的编解码器&#xff0c;它是C语言实现的&#xff0c;不仅被集成到各种PC软件&#xff0c;也经常被移植到多种嵌入式设备中。使用面向对象的办法来设想这样一个编解码库&#xff0c;首先让人想…

如何快糙好猛的使用Shiqi.Yu老师的公开人脸检测库(附源码)

前言 本次编写所用的库为于仕祺老师免费提供的人脸检测库。真心好用&#xff0c;识别率和识别速度完全不是Opencv自带的程序能够比拟的。将其配合Opencv的EigenFace算法&#xff0c;基本上可以形成一个小型的毕业设计。&#xff08;我是学机械的啊喂&#xff01;&#xff01;&a…

Maven理解

2019独角兽企业重金招聘Python工程师标准>>> Maven概念 参考maven入门 冰河winner Maven作为一个构建工具&#xff0c;不仅能帮我们自动化构建&#xff0c;还能够抽象构建过程&#xff0c;提供构建任务实现;它跨平台&#xff0c;对外提供了一致的操作接口&#xff0…

C# FileSystemWatcher 在监控文件夹和文件时的用法

********************************************************************************** 第一个文章: ********************************************************************************** 概述 最近学习FileSystemWatcher的用法,它主要是监控一个文件夹,当文件夹内的文件要…

比微软kinect更强的视频跟踪算法--TLD跟踪算法介绍

TLD (Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生在其攻读博士学位期间提出的一种新的单目标长时间&#xff08; long term tracking &#xff09;跟踪算法。该算法与传统跟踪算法的显著区别在于将传统的跟踪算法和传统的检测算法相结合来解决被跟踪目标在被…

一张图看懂混合云数据同步一站式解决方案

摘要&#xff1a; 针对不同数据库间数据实时同步难的问题&#xff0c;日前&#xff0c;阿里云宣布推出混合云数据同步一站式解决方案&#xff0c;便于广大云产品用户实现实时数据同步的混合云支持&#xff0c;更为方便的是&#xff0c;该功能让本地Oracle也能实现与云上数据库的…

分布式性能测试

Jmeter分布式测试 在使用Jmeter进行性能测试时&#xff0c;如果并发数比较大(比如最近项目需要支持1000并发)&#xff0c;单台电脑的配置(CPU和内存)可能无法支持&#xff0c;这时可以使用Jmeter提供的分布式测试的功能。 一、Jmeter分布式执行原理&#xff1a; 1、Jmeter分布式…

socket,TCP/IP的理解(转)

TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族&#xff0c; TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;即传输控制协议/网间协议&#xff0c;定义了主机如何连入因特网及数据如何再它们之间传输的标准&#xff0c; 从字面意思来看TCP…

最小中间和

题目描述 给定一个正整数序列a1,a2,...,an&#xff0c;不改变序列中的每个元素在序列中的位置&#xff0c;把它们相加&#xff0c;并用括号记每次加法所得的和&#xff0c;称为中间和。编程&#xff1a;找到一种方法&#xff0c;添上n-1对括号&#xff0c;加法运算依括号顺序进…

双目匹配与视差计算

立体匹配主要是通过找出每对图像间的对应关系&#xff0c;根据三角测量原理&#xff0c;得到视差图&#xff1b;在获得了视差信息后&#xff0c;根据投影模型很容易地可以得到原始图像的深度信息和三维信息。立体匹配技术被普遍认为是立体视觉中最困难也是最关键的问题&#xf…

概率论与数理统计-ch8-假设检验

1、假设检验 在总体的分布函数未知或只知其形式、不知其参数的情况下&#xff0c;为了推断总体的某些未知特性&#xff0c;提出关于总体的假设&#xff0c;然后根据样本数据对提出的假设做出接受或拒绝的决策。 步骤&#xff1a; 提出原假设--确定建立在样本基础上的检验统计量…

简单实现仿某宝地址选择三级联动样式

内容简单介绍实现步骤第一步 找准方向第二步 开干总结还是题外话内容简单介绍 简单看一下须要实现的效果&#xff0c;如图&#xff1a; 实现步骤 第一步 找准方向 事实上就是想好要用recyclerview而不是listview。假设要问我recyclerview是什么的话。。 第二步 开干 首先须要先…

opencv双目测距实现

虽然最近注意力已经不可遏制地被神经科学、大脑记忆机制和各种毕业活动吸引过去了&#xff0c;但是还是觉得有必要把这段时间双目视觉方面的进展总结一下。毕竟从上一篇博文发表之后&#xff0c;很多同仁发E-mail来与我讨论&#xff0c;很多原来的疑团&#xff0c;也在讨论和一…

Block的循环引用详解

1.首先我们创建了一个网络请求工具类 然后storyboard里面去创建了一个导航控制器 并且把它设置为初始控制器 然后拖入一个bar button &#xff0d;&#xff0d;show&#xff0d;&#xff0d;到自带的控制器 这个时候运行代码的结果是 x 显然这个时候没有造成循环引用 为什…

计算机视觉和图形学中的摄像机内参数矩阵详解

在计算机视觉和图形学中都有“摄像机内参数矩阵”这个概念&#xff0c;其含义大致相同&#xff0c;但在实际使用过程中&#xff0c;这两个矩阵却相差甚远。在增强现实中&#xff0c;为了使计算机绘制的虚拟物体和真实环境图像对其&#xff0c;需要令虚拟摄像机的内参数和真实摄…