Atitit opencv模板匹配attilax总结

找一幅图像的匹配的模板,可以在一段视频里寻找出我们感兴趣的东西,比如条形码的识别就可能需要这样类似的一个工作提取出条形码区域(当然这样的方法并不鲁棒)。而OpenCV已经为我们集成好了相关的功能。函数为matchTemplate。

所谓模板匹配就是在一幅图像中寻找和模板图像(patch)最相似的区域。该函数的功能为,在输入源图像Source image(I)中滑动框,寻找各个位置与模板图像Template image(T)的相似度,并将结果保存在结果矩阵result matrix(R)中。该矩阵的每一个点的亮度表示与模板T的匹配程度。然后可以通过函数minMaxLoc定位矩阵R中的最大值(该函数也可以确定最小值)。

模板匹配是数字图像处理的重要组成部分之一。把不同传感器或同一传感器在不同时间、
不同成像条件下对同一景物获取的两幅或多幅图像在空间上对准,或根据已知模式到另一幅
图中寻找相应模式的处理方法就叫做模板匹配。
    简单而言,模板就是一幅已知的小图像。模板匹配就是在一幅大图像中搜寻目标,已知
该图中有要找的目标,且该目标同模板有相同的尺寸、方向和图像,通过一定的算法可以
在图中找到目标,确定其坐标位置。

2.2 模板尺寸

  模板尺寸对系统性能和计算量的影响不容小觑。模板过大导致动态特性变差;过小又会减少目标的特征数据量,降低匹配的敏感程度,增大目标检测难度。实际操作中,模板尺寸设置为32×16时效果非常理想。

2.3 匹配区域

  不同的应用环境下,对匹配区域和实时性要求也不尽相同。光电探测设备需要在视频图像采集周期内(20ms)完成数据实时处理。由于目标在两场视频图像之间的移动量较小、特征变化不大,匹配区域可以大大缩小。

  匹配区域太小会导致目标动态特性变差,过大又会导致计算量大幅度增加,具体选择需要权衡设备参数来决定。由于CCIR制式视频信号是隔行扫描,系统出于实时性考虑,数据以场为单位处理,导致图像比例为2:1状态。为了保持水平、垂直方向的动态特性一致,图像匹配区域也按2:1比例选择。

其实模板匹配的使用和直方图反向投影calcBackProject函数很像,只是直方图反向投影对比的是直方图,而模板匹配对比的是图像的像素值,相比较而言,直方图反向投影的匹配鲁棒性更好。

/atiplat_img/src/com/attilax/img/util/OpencvUtil.java

@SuppressWarnings("unused")

public static Point matchTemplate(BufferedImage srcImg, BufferedImage desImg, BufferedImage resultRect4dbg, int matchMode) throws CantFindMatchIOException {

Mat source = bufImg2mat(srcImg);

Mat dst = bufImg2mat(desImg);

Mat result = Mat.zeros(source.rows(), source.cols(), CvType.CV_32FC1);

try {

Imgproc.matchTemplate(source, dst, result, matchMode); // TM_CCOEFF_NORMED

catch (Exception e) {

throw new RuntimeException("Imgproc.matchTemplate ex:" + e.getMessage(), e);

}

// 规格化 rst= Mat [ 1005*1236*CV_32FC1, isCont=true, isSubmat=false,

// nativeObj=0x57b3fca0, dataAddr=0x59e80050 ]

Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1);

// 获得最可能点,MinMaxLocResult是其数据格式,包括了最大、最小点的位置x、y

// System.out.println(AtiJson.toJson(result));

MinMaxLocResult mlr = Core.minMaxLoc(result);

Point matchLoc = getMatchPoint(matchMode, mlr);

// 在原图上的对应模板可能位置画一个绿色矩形

Core.rectangle(source, matchLoc, new Point(matchLoc.x + dst.width(), matchLoc.y + dst.height()), new Scalar(0, 255, 0));

resultRect4dbg = mat2bufImg(source);

if (matchLoc != null)

return matchLoc;

throw new CantFindMatch(" cant find match");

}

private static Point getMatchPoint(int matchMode, MinMaxLocResult mlr) {

Point matchLoc;

if (matchMode == Imgproc.TM_SQDIFF || matchMode == Imgproc.TM_SQDIFF_NORMED) {

matchLoc = mlr.minLoc;

else {

matchLoc = mlr.maxLoc;

}

return matchLoc;

}

作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王"Bird Catcher  kok  虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak 万兽之王

简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当  阿尔 拉帕努伊

常用名:艾提拉(艾龙),  EMAIL:1466519819@qq.com

头衔:uke总部o2o负责人,全球网格化项目创始人,

uke交友协会会长  uke捕猎协会会长 Emir Uke部落首席大酋长,

uke宗教与文化融合事务部部长, uke宗教改革委员会副主席

uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,

uke 首席cto  奶牛科技首席cto , 软件部门总监 技术部副总监  研发部门总监主管  产品部副经理 项目部副经理  奶牛科技研究院院长

uke波利尼西亚区大区连锁负责人 汤加王国区域负责人 uke克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke布维岛和南乔治亚和南桑威奇群岛大区连锁负责人

Uke软件标准化协会理事长理事长 Uke 数据库与存储标准化协会副会长

uke终身教育学校副校长   Uke医院 与医学院方面的创始人

uec学院校长, uecip图像处理机器视觉专业系主任   uke文档检索专业系主任

Uke图像处理与机器视觉学院首席院长

Uke 户外运动协会理事长  度假村首席大村长   uke出版社编辑总编

转载请注明来源:attilax的专栏  ?http://www.cnblogs.com/attilax/

--Atiend  v7

Atitit opencv模板匹配attilax总结的更多相关文章

  1. Atitit opencv 模板匹配

    Atitit opencv 模板匹配 1.1. 图片1 1.2. Atitit opencv 模板匹配  6中匹配算法貌似效果区别不大1 1.3. 对模板缩放的影响 一般的缩放可以,太大了就歇菜了.. ...

  2. opencv 模板匹配与滑动窗口(单匹配) (多匹配)

    1单匹配: 测试图片:   code: #include <opencv\cv.h> #include <opencv\highgui.h> #include <open ...

  3. OpenCV模板匹配函数matchTemplate详解

    参考文档:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matchin ...

  4. OpenCV——模板匹配

    minMaxLoc函数: void minMaxLoc( const Mat& src, double* minVal, double* maxVal=0, Point* minLoc=0, ...

  5. opencv::模板匹配(Template Match)

    模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域. 所以模板匹配首先需要一个模板图像T(给定的子图像) 另外需要一个待检测的图像-源图像S 工作方法,在带检测图像上,从左到右,从 ...

  6. 关于opencv模板匹配功能的项目测试记录

    模板匹配功能介绍的很好的一篇博客:https://www.cnblogs.com/XJT2018/p/9934139.html 就如上述博客所言:“若原图像中的匹配目标发生旋转或大小变化,该算法无效. ...

  7. opencv模板匹配查找图像(python)

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- import cv2 import numpy as np from cv2 import COLOR_B ...

  8. opencv 模板匹配, 已解决模板过大程序不工作的bug

    #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv ...

  9. opencv模板匹配有趣的链接

    https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_template_matching/py_template_matchi ...

随机推荐

  1. Java之创建对象>4.Enforce noninstantiability with a private constructor

    如果你定义的类仅仅是包含了一些静态的方法和静态的字段,这些类一般是一些工具类,这些一般是设计为不能被实例化的. 1. Attempting to enforce noninstantiability ...

  2. python模块之httplib(在py3中功能进一步强大,请详看文档)

    # -*- coding: utf-8 -*-#python 27#xiaodeng#python模块之httplib(在py3中功能进一步强大,请详看文档) import httplib#是较为底层 ...

  3. java 怎么打印变量

    //Test.java public class Test16{ public static void main(String args[]){ int age=28; System.out.prin ...

  4. docker overlay存储驱动介绍(传送门)

    https://blog.csdn.net/u010278923/article/details/79215828

  5. Ubuntu x86-64汇编(4) 数值操作指令

    整数乘法指令 Integer Multiplication 对于有符号数的乘法有特殊的规则, 因此无符号数乘法和有符号数乘法对应着不同的指令mul和imul. 乘法会产生两倍尺寸的数值结果, 即两个n ...

  6. Ubuntu16.04下添加打印机FujiXerox CP116w

    今天要打印一份北马的成绩单, 不想重启机器了, 在Ubuntu下尝试添加打印机, 最后成功了, 记录一下 打印机型号是FujiXerox CP116w, 通过WIFI连接的, 在Ubuntu16.04 ...

  7. 俄罗斯方块-C语言-详注版

    代码地址如下:http://www.demodashi.com/demo/14818.html 俄罗斯方块-C语言-详注版 概述 本文详述了C语言版俄罗斯方块游戏的原理以及实现方法,对游戏代码进行了详 ...

  8. QQ通讯录VS360通讯录对新建信息界面中草稿的处理

    在新建信息界面中,对草稿信息的处理. 1. QQ通讯录的处理是: 如果信息编辑框不为空,点击HOME键或者点击BACK键,保存草稿,同时结束新建信息界面. 如果收件人为空,也保存草稿,只是将收件人取名 ...

  9. MyEclipse 2014安装properties文件插件

    安装步骤 1.下载PropertiesEditor插件 http://propedit.sourceforge.jp/index_en.html2.解压出features.plugins文件3.在My ...

  10. CentOS6.6安装S******Sockets服务端

    1.查看系统 [root@localhost ~]# cat /etc/issue CentOS release 6.6 (Final) [root@localhost ~]# uname -a Li ...