OpenCV学习笔记[4]模板匹配
来源:互联网 发布:java list集合去重 编辑:程序博客网 时间:2024/05/16 03:43
OpenCV学习笔记:模板匹配 Java version
首先我要纠正一个错误的学习习惯,像OpenCV这样的大型库,按照官方教程一步一步调试的学习效率太低了,OpenCV就像字典一样,当我们需要计算机进行某些视觉特性模拟时,针对具体问题去检索库中对应的API即可。
尽管官方教程非常详细,但除了人脸识别的Demo和一套doc外,没有其他Java实例,教程中详细的实例都由C语言编写,我在测试的过程中会将对应部分按照OOP形式重写为Java模块,并在学习笔记中贴出。
官方教程可以在OpenCV库解压目录的build/doc下找到,当然,是英文的。
[简介]
模板匹配,通俗的讲,提供原始图片与其中的一部分,找出该部分在原始图片中的位置,它存在诸多限制,对模板的转置与缩放会严重影响匹配结果,但容许一定的失真。
[模板匹配]
TemplateMaching.java:
import org.opencv.core.Core;import org.opencv.core.Core.MinMaxLocResult;import org.opencv.core.CvType;import org.opencv.core.Mat;import org.opencv.core.Point;import org.opencv.core.Scalar;import org.opencv.highgui.Highgui;import org.opencv.imgproc.Imgproc;public class TemplateMaching {private String sourcePath,dstPath;private Mat source,dst;//原图片public void setSource(String picPath){this.sourcePath = picPath;}//需要匹配的部分public void setDst(String picPath){this.dstPath = picPath;}//处理,生成结果图public void process(){//将文件读入为OpenCV的Mat格式source = Highgui.imread(sourcePath);dst = Highgui.imread(dstPath);//创建于原图相同的大小,储存匹配度Mat result = Mat.zeros(source.rows(),source.cols(),CvType.CV_32FC1);//调用模板匹配方法Imgproc.matchTemplate(source, dst, result,Imgproc.TM_SQDIFF);//规格化Core.normalize(result, result, 0, 1,Core.NORM_MINMAX, -1);//获得最可能点,MinMaxLocResult是其数据格式,包括了最大、最小点的位置x、yMinMaxLocResult mlr = Core.minMaxLoc(result);Point matchLoc = mlr.minLoc;//在原图上的对应模板可能位置画一个绿色矩形Core.rectangle(source, matchLoc, new Point(matchLoc.x + dst.width(),matchLoc.y + dst.height()),new Scalar(0,255,0));//将结果输出到对应位置Highgui.imwrite("./Result/TMOutPut.png",source);}public static void main(String[] args) {System.loadLibrary("opencv_java249");TemplateMaching macher = new TemplateMaching();//设置原图macher.setSource("./Data/Lession4/BK.jpg");//设置要匹配的图macher.setDst("./Data/Lession4/BK_DST_DES.jpg");macher.process();}}
[测试图例]
原图:
匹配图(原始、转置、缩放、失真):
[测试结果]
[原始测试]
↑匹配
[转置测试]
↑产生偏移
[缩放测试]
↑产生偏移,大小错误
[失真测试]
↑匹配
[总结]
对于图像识别,模板映射存在着较大的限制,在今后的学习中会着重寻找特性匹配的内容。
0 0
- OpenCV学习笔记[4]模板匹配
- OpenCV 学习笔记(模板匹配)
- OpenCV学习笔记(十七)模板匹配
- opencv学习笔记(三十二)模板匹配
- 【OpenCV学习笔记】【算法学习】一(模板匹配)
- 【openCV笔记1】模板匹配
- opencv笔记之模板匹配
- OpenCV学习笔记(十三)——模板匹配
- OpenCV学习笔记(十三)——模板匹配
- Opencv Python版学习笔记(三)模板匹配
- OpenCV 2 学习笔记(26): 自选区域进行模板匹配
- OpenCV学习笔记(5)——模板匹配
- opencv学习之模板匹配
- Opencv学习之模板匹配
- OpenCV学习2 模板匹配
- opencv模板匹配笔记----C++练手项目
- OpenCV学习——模板匹配
- opencv学习-imgprocess-模板匹配matchTemplate
- hive,hbase与pig的区别与联系
- Linux下的常用编程工具初探
- EL表达式
- S3C2440上 MMC/SD卡驱动实例开发讲解
- 基于管道化和事件驱动模型的Web请求处理(一)
- OpenCV学习笔记[4]模板匹配
- 极大提高Web开发效率的8个工具和建议(含教程)
- 基于管道化和事件驱动模型的Web请求处理(二)
- RAII 想到AutoLock,Mutex类和C++11中的unique_lock
- struts2验证码代码
- 关于Mutex的构造函数参数设置
- org.hibernate.DuplicateMappingException: duplicate import:
- 基于S3C2440的嵌入式Linux驱动——SPI子系统解读(一)
- 基于S3C2440的嵌入式Linux驱动——MMC/SD子系统解读(一)