实时摄像机上的EmguCV模板匹配

时间:2019-06-16 13:51:22

标签: c# image-processing real-time emgucv template-matching

我是图像处理领域的新手,我正试图在EmguCV的帮助下制作多个模板匹配的应用程序。在Form1上,我有: -一个imageBox(来自EmguCV的pictureBox),在这里我从摄像机接收图像(实时); -调用“多个模板匹配功能”的按钮。 我设法从imageBox1的相机中获取图像,现在我正努力使用该模板匹配功能。我在here上找到了一些帮助,但是我不知道为什么该代码不起作用(消息框不会弹出)。我对代码进行了一些更改以适合我的情况,并得到了这样的代码:

private void ProcessFrame(object sender, EventArgs e)
{
   frame = _capture.QueryFrame();
   if (can_process)
   {
        Image<Bgr, byte> source = frame;

        if (!Directory.Exists(saoi_templatesPath))
                throw new Exception($"Directory was not found: '{saoi_templatesPath}'");

        Parallel.ForEach(Directory.GetFiles(saoi_templatesPath), (fname) =>
        {
             double[] minValues, maxValues;
             Point[] minLocations, maxLocations;

             Image<Gray, float> result = source.MatchTemplate(new Image<Bgr, byte>(fname), TM_TYPE.CV_TM_CCOEFF_NORMED);
             result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);

             if (maxValues[0] > 0.95)
             {
                //Rectangle match = new Rectangle(maxLocations[0], fname.Size ??? );
                //source.Draw(match, new Bgr(Color.Blue), 3);
                MessageBox.Show("match");
             }
          });
       }
     imageBox1.Image = frame;
}

我想要什么:

  • 该功能应在imageBox1中搜索“模板”文件夹中的所有模板,如果找到匹配项,则在其周围绘制一个矩形

  • 问题1:这段代码在普通的pictureBox上也能正常工作吗?

  • 问题2:找到匹配项后,MessageBox应该弹出,对吗?为什么不这样做?

有用的信息(或没有?)

  • 当我单击按钮时,can_process变为true
  • saoi_templatesPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)+ @“ \” +“ S.A.O.I \ Templates”;
  • 该文件夹中的模板的扩展名为.PNG,位深度为24bpp,并从imageBox1中保存的图像中裁剪而成。
  • 相机的分辨率设置为640x480
  • imageBox1的Size =(511,385)和SizeMode = Zoom
  • 我正在使用EmguCV(2.2.1.1150),因为我无法使相机在新版本上工作

=>编辑 -我将阈值的值从0.95更改为0.60,但是什么也没有... -我尝试了在SO和Internet上找到的所有其他代码和信息...猜测是什么,仍然一无所获。 我为此苦苦挣扎了大约两个星期,真令人沮丧。

0 个答案:

没有答案