IT技术互动交流平台

EmguCVImage类中的函数(四)使用MatchTemplate函数进行模板匹配

来源:IT165收集  发布日期:2015-08-27 22:25:30

MatchTemplate的函数原型为

Image<Gray, float> MatchTemplate(Image<TColor, TDepth> template, TemplateMatchingType method);

其中TemplateMatchingType 共有6种检测方式
1、平方差匹配 Sqdiff
最好匹配为0.匹配越差,匹配值越大。
2、相关匹配 Ccorr
数值越大表示匹配程度较高,0为最坏的匹配效果。
3相关匹配Ccoeff
1为完美匹配,-1表示最差的匹配,0表示没有任何相关性(随机序列).
4、标准平方差匹配SqdiffNormed
最小值表示最好的匹配
5、标准相关匹配CcorrNormed
最大值为最好匹配
6、标准相关匹配CcoeffNormed
最大值为最好匹配

原理:
通过图像块一次移动一个像素 (从左往右,从上往下)的. 在每一个位置, 都进行一次度量计算来说明图像块和原图像的特定区域的相似度。

用法如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.CV.Util;
using Emgu.Util;
using Emgu.CV.UI;

namespace EmguCVHist
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Image<Bgr, byte> a = new Image<Bgr, byte ('738b4710b912c8fc453a8235fe039245d7882178.jpg');
            Image<Bgr, byte> b = new Image<Bgr, byte>('QQ截图20150827003943.png');
            Image<Gray, float> c = new Image<Gray, float>(a.Width, a.Height);
            c = a.MatchTemplate(b, TemplateMatchingType.CcorrNormed);
            double min=0, max=0;
            Point maxp = new Point(0, 0);
            Point minp = new Point(0, 0);
            CvInvoke.MinMaxLoc(c, ref min, ref max, ref minp, ref maxp);
            Console.WriteLine(min + ' ' + max);
            //CvInvoke.Normalize(c, c);
            CvInvoke.Rectangle(a, new Rectangle(maxp, new Size(b.Width, b.Height)), new MCvScalar(0, 0, 255), 3);
            imageBox1.Image = a;
        }
    }
}

效果图:中间为运行图
这里写图片描述

 

Tag标签: 函数   模板  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规