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


相关推荐

  • map平均准确率_拓扑排序怎么排

    map平均准确率_拓扑排序怎么排给定一张 N 个点 M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。输入格式第一行两个整数 N,M,接下来 M 行每行两个整数 x,y,表示从 x 到 y 的一条有向边。输出格式输出共 N 行,表示每个点能够到达的点的数量。数据范围1≤N,M≤30000输入样例:10 103 82 32 55 95 92 33 94 82 104 9输出样例:1633211111#include<bits/stdc++.h>using

    2022年8月9日
    6
  • 树、二叉树(完全二叉树、满二叉树)概念图解「建议收藏」

    树、二叉树(完全二叉树、满二叉树)概念图解「建议收藏」1、树的定义树是n个结点的有限集合,有且仅有一个根结点,其余结点可分为m个根结点的子树。2、树的概念结点的度:一个结点拥有子树的个数称为度。比如A的度为3,C的度为2,H的度为0。度为0的结点称为叶子节点(D,F,G,H)。树的度是树中所有结点的度的最大值,此树的度为3。 树中结点的最大层次成为树的深度或高度。此树的深度为4。 父节点A的子结点B,C,D;B,C,D也是兄弟节点…

    2022年7月13日
    17
  • 风控决策引擎经验

    风控决策引擎经验转载自https://mp.weixin.qq.com/s/LDcquVOTlCKJluyWG3AGAA一套完整的风控体系,在风控中,少不了决策引擎,今天就浅谈一下风控决策引擎。一、优先级风控决策引擎是一堆风控规则的集合,通过不同的分支、层层规则的递进关系进行运算。而既然是组合的概念,则在这些规则中,以什么样的顺序与优先级执行便额外重要。风控系统的作用在于识别绝对风控与标识相对风险…

    2022年6月15日
    50
  • 矩阵可逆的充要条件证明_两个矩阵相乘所得矩阵的秩

    矩阵可逆的充要条件证明_两个矩阵相乘所得矩阵的秩矩阵可逆的充要条件有很多,在此进行总结。设A为n阶矩阵,则矩阵A可逆的充要条件为:|A|≠0;r(A)=n;A的列(行)向量组线性无关;A的特征值中没有0;A可分解为若干初等矩阵的乘积.

    2022年8月5日
    21
  • 支付逻辑漏洞

    支付逻辑漏洞警告请勿使用本文提到的内容违反法律。本文不提供任何担保一、漏洞分类(一)支付过程中可直接修改数据包中的支付金额这种漏洞应该是支付漏洞中最常见的,主要针对支付宝等需要第三方支付的案例。开发人员往往会为了方便,直接在支付的关键步骤数据包中直接传递需要支付的金额。而这种金额后端没有做校验,传递过程中也没有做签名,导致可以随意篡改金额提交。只需要在支付过程中用抓包工具抓包发现有金额的参数修改成任意即可。(二)没有对购买数量进行限制这种漏洞应该是支…

    2022年6月12日
    33
  • S3C2440移植uboot之支持NANDFLASH操作

    S3C2440移植uboot之支持NANDFLASH操作上一节我们移植了uboot,S3C2440移植uboot之支持NORFLASH。这节我们继续移植,支持NANDFLASH。之前由于nand部分报错,直接注释了 u-boot-2012.04.01\include\configs\smdk2440.h中的#defineCONFIG_CMD_NAND。现在我们去掉注释,重新编译。报错如下是我们没有定义CONFIG_S3C2410导致的可以…

    2022年6月3日
    32

发表回复

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

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