EmguCv模板匹配[通俗易懂]

模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。先贴上简陋的界面图  代码:Matsrc=newImage<Bgr,byte>(ib_o…

大家好,又见面了,我是你们的朋友全栈君。

模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。

先贴上简陋的界面图 

EmguCv模板匹配[通俗易懂]

 代码:

Mat src = new Image<Bgr, byte>(ib_original.Image.Bitmap).Mat;

            Mat temp = new Mat("模板.jpg", Emgu.CV.CvEnum.LoadImageType.AnyColor);//匹配的模板
            //创建mat 存储输出匹配结果。
            Mat result = new Mat(new Size(src.Width - temp.Width + 1, src.Height - temp.Height + 1),
                Emgu.CV.CvEnum.DepthType.Cv32F, 1);

            #region 模板匹配参数说明
            //采用系数匹配法,匹配值越大越接近准确图像。
            //IInputArray image:输入待搜索的图像。图像类型为8位或32位浮点类型。设图像的大小为[W, H]。
            //IInputArray templ:输入模板图像,类型与待搜索图像类型一致,并且大小不能大于待搜索图像。设图像大小为[w, h]。
            //IOutputArray result:输出匹配的结果,单通道,32位浮点类型且大小为[W - w + 1, H - h + 1]。
            //TemplateMatchingType method:枚举类型标识符,表示匹配算法类型。
            //Sqdiff = 0 平方差匹配,最好的匹配为 0。
            //SqdiffNormed = 1 归一化平方差匹配,最好效果为 0。
            //Ccorr = 2 相关匹配法,数值越大效果越好。
            //CcorrNormed = 3 归一化相关匹配法,数值越大效果越好。
            //Ccoeff = 4 系数匹配法,数值越大效果越好。
            //CcoeffNormed = 5 归一化系数匹配法,数值越大效果越好。
            #endregion
            CvInvoke.MatchTemplate(src, temp, result, Emgu.CV.CvEnum.TemplateMatchingType.Ccoeff);

            #region 归一化函数参数说明
            //IInputArray src:输入数据。
            //IOutputArray dst:进行归一化后输出数据。
            //double alpha = 1; 归一化后的最大值,默认为 1。
            //double beta = 0:归一化后的最小值,默认为 0。
            #endregion
            CvInvoke.Normalize(result, result, 255, 0, Emgu.CV.CvEnum.NormType.MinMax);

            double max = 0, min = 0;//创建double的极值。
            Point max_point = new Point(0, 0), min_point = new Point(0, 0);

            #region 极值函数参数说明
            //IInputArray arr:输入数组。
            //ref double minVal:输出数组中的最小值。
            //ref double maxVal; 输出数组中的最大值。
            //ref Point minLoc:输出最小值的坐标。
            //ref Point maxLoc; 输出最大值的坐标。
            //IInputArray mask = null:蒙版。
            #endregion
            CvInvoke.MinMaxLoc(result, ref min, ref max, ref min_point, ref max_point);
            CvInvoke.Rectangle(src, new Rectangle(max_point, temp.Size), new MCvScalar(0, 0, 255), 3);//绘制矩形,匹配得到的效果。
            tb_result.Text = "min=" + min + ",max=" + max;
            tb_result.Text += Environment.NewLine;
            tb_result.Text += "最大值坐标:"+ max_point.ToString();
            tb_result.Text += Environment.NewLine;
            tb_result.Text += "最小值坐标:" + min_point.ToString();
            ib_original.Image = src;

 

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126823.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 虚拟机的光盘映像文件需要下载吗_防止vmware虚拟机被检测到

    虚拟机的光盘映像文件需要下载吗_防止vmware虚拟机被检测到在百度经验中找到了解决办法,链接如下https://jingyan.baidu.com/article/25648fc18248a99191fd00fb.html

    2022年8月2日
  • javascript格式化输出的实现(MuJS)

    javascript格式化输出的实现(MuJS)MuJS是一款支持嵌入式开发的轻量级javascript解释器。javascript主要是针对web开发的脚本语言,所以主要借助浏览器来调试;但mujs针对的是嵌入式开发,调试时的交互主要靠输入输出终端,javascript本身是不支持的,所以需要调用c语言的打印函数来实现。下面给出两个例子,一个是普通输出,符合脚本语言的解释性语言的特点,不考虑变量的类型;另一个是简单的格式化输出。前一个…

    2022年10月31日
  • IIC通信协议详解

    IIC通信协议详解IIC通信协议详解IIC的概述IIC分为软件IIC和硬件IICIIC通信协议空闲状态开始信号与停止信号开始信号程序:IIC的概述IIC:两线式串行总线,它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbs以上。时钟线SCL:在通信过程起到控制作用。数据线SDA:用来一位一位的传送数据。IIC分为软件IIC和硬件IIC软件IIC:软件IIC通信指的是用单片机的两个I/O端口模拟出来的IIC,用

    2022年6月10日
  • QT5编程入门教程(非常详细)「建议收藏」

    QT5编程入门教程(非常详细)「建议收藏」Qt是一个跨平台的C++框架(C++库),目前最新的版本是Qt5。Qt5还包含了很多小版本,其中推荐Qt5.6或Qt5.9,这两个版本是LTS版本(即长期支持版本),Bug较少,相对稳定。Qt除了支持界面设计(GUI编程),还封装了与网络编程、多线程、数据库连接、视频音频等相关的功能。这套Qt教程以Qt5.9为基础来介绍Qt开发,配有精美的图片以及完整的示例程序,几乎涉及Qt编程的所有模块。注意,本教程不再对C++语法进行介绍,没有C++基础的读者…

    2022年5月16日
  • mysql面试题目及答案_docker 面试题

    mysql面试题目及答案_docker 面试题1.事务的基本特征原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。一致性(consistency):数据库总数从一个一致性的状态转换到另一个一致性的状态。隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的…

    2022年8月27日
  • 用户访问路径分析_访问路径是什么意思

    用户访问路径分析_访问路径是什么意思1971年,在英国伦敦召开的国际园林艺术研讨会上,迪斯尼乐园的路径设计获得世界最佳设计奖。可是,你知道吗?这条路径却并非出自某个设计大师之手,完全是游人"自行设计"(实际就…

    2022年8月24日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号