EmguCv模板匹配学习日记

参考:https://blog.csdn.net/xjjatdna/article/details/86586276

   public static void TemplateMache(string srcImg, string tempImg)
        {
            using (Mat tempImage = CvInvoke.Imread(tempImg, ImreadModes.AnyColor))
            using (Mat srcImage = CvInvoke.Imread(srcImg, ImreadModes.AnyColor))
            {
                //创建mat 存储输出匹配结果。
                Mat result = new Mat(new Size(srcImage.Width - tempImage.Width + 1, srcImage.Height - tempImage.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(srcImage, tempImage, 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(srcImage, new Rectangle(max_point, tempImage.Size), new MCvScalar(0, 0, 255), 3);//绘制矩形,匹配得到的效果。
           
            }
        
          
        }

模板图片: 

 匹配图片:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小小陆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值