原创EMGUCV的模板匹配与跟踪完成啦.docx

上传人:b****5 文档编号:3204090 上传时间:2022-11-20 格式:DOCX 页数:10 大小:583.32KB
下载 相关 举报
原创EMGUCV的模板匹配与跟踪完成啦.docx_第1页
第1页 / 共10页
原创EMGUCV的模板匹配与跟踪完成啦.docx_第2页
第2页 / 共10页
原创EMGUCV的模板匹配与跟踪完成啦.docx_第3页
第3页 / 共10页
原创EMGUCV的模板匹配与跟踪完成啦.docx_第4页
第4页 / 共10页
原创EMGUCV的模板匹配与跟踪完成啦.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

原创EMGUCV的模板匹配与跟踪完成啦.docx

《原创EMGUCV的模板匹配与跟踪完成啦.docx》由会员分享,可在线阅读,更多相关《原创EMGUCV的模板匹配与跟踪完成啦.docx(10页珍藏版)》请在冰豆网上搜索。

原创EMGUCV的模板匹配与跟踪完成啦.docx

原创EMGUCV的模板匹配与跟踪完成啦

原创-EMGUCV的模板匹配与跟踪完成啦!

 

兄弟们好!

  经过很多天的努力学习,我的EMGUCV的模板匹配完成了,用实际的摄像头取图象,再存为模板后,就能实现物体跟踪,还能进行相机上马达进行位置确定。

好玩吧!

弄两幅图来看下。

这是匹配的,还能过行坐标二次定位。

坐标二次定位的

这是跟踪的

 

以下为代码,只有自己写的部分,由软件生成的部分没有帖上

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Threading;

usingSystem.IO;

usingSystem.Drawing.Imaging;

 

usingEmgu.CV;

usingEmgu.CV.Structure;

usingEmgu.CV.CvEnum;

usingEmgu.CV.Util;

usingEmgu.CV.UI;

usingEmgu.CV.VideoSurveillance;

usingEmgu.Util;

usingEmgu.Util.TypeEnum;

usingEmgu.CV.GPU;

namespace模板匹配

{

  publicpartialclassForm1:

Form

  {

    publicImagesrc;

    publicImagetempsrc;

    publicForm1()

    {

      InitializeComponent();

    }

    privatevoidbutton1_Click(objectsender,EventArgse)

    {

      OpenFileDialogof=newOpenFileDialog();

      of.Filter="(jpg)|*.jpg";

      if(of.ShowDialog()==DialogResult.OK)

      {

        Imageimsrc=newImage(of.FileName);

        imageBox2.Image=imsrc;

        src=imsrc;

        imageBox1.Image=null;

      }

    }

    privatevoidbutton2_Click(objectsender,EventArgse)

    {

      if(src!

=null)

      {

        Imageimgsrc=src.Clone();//不可直接将src符值给新建图象,它传的只是一个地址,不是数据,要先考贝后才能不再引响原图像

        Imageimggray=imgsrc.Convert();

        Imageimgthread=imggray.ThresholdBinary(newGray(60),newGray(255));

        Imageimgcanny=imgthread.Canny(130,255);

        //Contourcontour=imgcanny.FindContours();//这个函数用来找中间的轮廓的每一个点,是一个数组点,很多个才能组成一个圆。

        CircleF[]cf=imgthread.HoughCircles(newGray(130),newGray(255),10,1,1,400)[0];

        MCvFontmf=newMCvFont(FONT.CV_FONT_HERSHEY_COMPLEX,1,1);

        if(cf.Length>0)

        {

          cf[0].Radius=cf[0].Radius+50;

          imgsrc.Draw(cf[0],newBgr(0,0,255),2);

          Rectanglerec=newRectangle((int)(cf[0].Center.X-cf[0].Radius),(int)(cf[0].Center.Y-cf[0].Radius),(int)(cf[0].Radius*2),(int)(cf[0].Radius*2));

          imgsrc.Draw(rec,newBgr(0,0,255),2);

          imgsrc.Draw(cf[0].Center.ToString()+","+cf[0].Radius.ToString(),refmf,newPoint(0,src.Height-30),newBgr(0,0,255));

          Imagetemplatebgr=src.Clone();

          Imagetemp1=templatebgr.GetSubRect(rec).Clone();

          imageBox1.Image=temp1;

          temp1.Save(@"e:

\template.jpg");

          tempsrc=temp1.Clone();

          MessageBox.Show(@"模板生成成功!

已保存到e:

\template.jpg中");

        }

        else

        {

          imgsrc.Draw(@"Dn'tfindoutcircle!

PLStryagina.",refmf,newPoint(0,src.Height-30),newBgr(0,0,255));

          imageBox1.Image=imgcanny;

        } 

      }

    }

    privatevoidbutton3_Click(objectsender,EventArgse)

    {

      Imageimgsrc=src.Convert().Clone();

      Imagereadimg=newImage(@"e:

\template.jpg");

      Imagetemplate=readimg.Convert().Clone();

      Imageimgcolor=src.Clone();

      Image imgresult=imgsrc.MatchTemplate(template,TM_TYPE.CV_TM_CCOEFF).Convert().Clone();

      imageBox1.Image=imgresult;

      doublebestvalue;

      Pointbestpoint;

      FindBestPoint(imgresult,TM_TYPE.CV_TM_CCOEFF,outbestvalue,outbestpoint);

      Rectanglerec1=newRectangle(newPoint(bestpoint.X,bestpoint.Y),template.Size);

      imgcolor.Draw(rec1,newBgr(0,0,255),2);

      MCvFontmf=newMCvFont(FONT.CV_FONT_HERSHEY_COMPLEX,1,1);

      imgcolor.Draw(rec1.X.ToString()+","+rec1.Y.ToString(),refmf,newPoint(0,src.Height-30),newBgr(0,0,255));

      imageBox1.Image=imgcolor ;

    }

    publicvoidFindBestPoint(Imageimage,TM_TYPEtmtype,outdoublebestvalue,outPointbestpoint)

    {

      bestvalue=0d;

      bestpoint=newPoint(0,0);

      double[]max,min;

      Point[]maxl,minl;

      image.MinMax(outmin,outmax,outminl,outmaxl);

      if(tmtype==TM_TYPE.CV_TM_SQDIFF||tmtype==TM_TYPE.CV_TM_SQDIFF_NORMED)

      {

        bestvalue=min[0];

        bestpoint=minl[0];

      }

      else

     

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1