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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python安装与第三方工具——pycharm安装

    Python安装与第三方工具——pycharm安装​​

    2022年8月28日
    3
  • 时间复杂度是什么_时间复杂度的表示方法

    时间复杂度是什么_时间复杂度的表示方法-宝宝为啥听不懂他们在讨论的时间复杂度0.0-我怎么知道这个算法运行得比那个算法快0.0-我究竟会不会超时0.0-我为什么还会超时0.0-时间复杂度怎么算0.0在别人还不会求时间复杂度的时候而你会了是不是很酷在别人都会求时间复杂度的时候而你不会是不是很尴尬千里之行始于足下希望这篇文章能祝你一臂之力=w= 此篇详解,希望能帮助各位稍微解决一下不解=w=…

    2025年6月6日
    0
  • J2EE是什么?和JavaEE的是什么关系?「建议收藏」

    J2EE是什么?和JavaEE的是什么关系?「建议收藏」首先,现在很多人看到J2EE会比较懵圈,因为接触的Java一般是JavaSE和JavaEE,其实J2EE在JDK5.0之后改名为了JavaEE,J2SE改为了JavaSE,只是名字上的一个更改而已。Java分三个版本:JavaSE(标准版)、JavaEE(企业版)、JavaME(微型版),其中JavaSE是Java编程语言的基础,JavaEE是用于公司的PC端开发的,而JavaME是用于移动端开发的。那么JavaEE呢,是java面向企业级的版本,主要面向是Web应用,尤其是企..

    2022年10月10日
    0
  • Laravel 底层原理:门面(Facades)

    Laravel 底层原理:门面(Facades)

    2022年2月15日
    46
  • CorelDraw技術討論區

    CorelDraw技術討論區CorelDraw製作討論專區子區:技術討論區

    2022年6月24日
    24
  • MATLABfill函数_matlab中C的模块名称是什么

    MATLABfill函数_matlab中C的模块名称是什么matlab移植C/C++代码时,发现不管是opencv还是IPP库都没有填充联通区域函数imfill(),于是只能自己动手了。先展示一下imfill()函数的功能,如下图:上图中,左图是一个二值图像,白色是手臂边缘像素值为1,黑色区域像素值为0,现在想将手臂填充1,用imfill()函数可以实现该功能,但C/C++代码需要自己实现。C/C++代码:boolimFill(Ipp8u*img,intwidth,intheight){ vector<int>q; int

    2022年9月12日
    1

发表回复

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

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