IInputArray图像参数用于使用haarcascade在c#中的emgucv中进行面部检测

时间:2017-07-11 02:30:51

标签: c# visual-studio emgucv

我已经安装了 emgu.cv 3.2(新版本) visual studio 2012 ,并且使用Windows窗体应用程序进行面部检测我尝试使用haarcascade。我已经完成了引用

  

(Emgu.CV.DebuggerVisualizers.VS2012.dll,Emgu.CV.UI.dll,   Emgu.CV.UI.GL.dll,Emgu.CV.World.dll)

并添加现有的

  

(opencv_ffmpeg320.dll等)

。新版本的 emgu.cv 似乎改变了一些名称,例如Capture取代了VideoCapture。但是,我仍然坚持完成下面的面部检测代码(最后一个代码)。我该怎么做才能将IInputArray图像参数放在DetectMultiScale()上。请帮忙!

    capture = new VideoCapture(0);
    haar = new CascadeClassifier("haarcascade_frontalface_default.xml");

    Image<Bgr, byte> nextFrame = capture.QueryFrame().ToImage<Bgr, byte>()
    Image<Gray, byte> grayframe = nextFrame.Convert<Gray, byte>();
     // stuck here below to put IInputArray image    
                        var faces = haar.DetectMultiScale( , 1.1, 10, 
                          Emgu.CV.CvEnum.HaarDetectionType.DoCannyPruning,  
                          new Size(20, 20));
      // or you can use this to code
                        MCvAvgComp[][] faces = 
                      haar.DetectMultiScale(**IInputArray image** , 1.1, 
                      10, Emgu.CV.CvEnum.HaarDetectionType.DoCannyPruning, 
                      new Size(20, 20));

1 个答案:

答案 0 :(得分:0)

新的EmguCv默认使用Mat作为图像格式。所以在IInputArray中你需要传递Mat

Mat matFrame = capture.QueryFrame();
Image<Bgr, byte> nextFrame = matFrame.ToImage<Bgr, byte>()
Image<Gray, byte> grayframe = nextFrame.Convert<Gray, byte>();

var faces = haar.DetectMultiScale( matFrame, 1.1, 10, 
                  Emgu.CV.CvEnum.HaarDetectionType.DoCannyPruning,  
                  new Size(20, 20));

IInputArray和IOutArray接受以下接口:

  • CvArray,它是Matrix和Image&lt;,&gt;
  • 的基类
  • 一个Mat,它是cv :: Mat
  • 的Open CV等价物
  • UMat,相当于cv :: UMat
  • 的Open CV
  • ScalarArray,可用于将标量转换为IInputArray
  • VectorOf {XXX},这是C ++标准向量的接口