使用 haarcascade 在 c# 中的 emgucv 中进行人脸检测的 IInputArray 图像参数

IInputArray image parameter for face detection in emgucv in c# using haarcascade

我已经安装了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 and others)

。新版本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));

新的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<,>
  • 的基础class
  • A Mat,相当于 cv::Mat
  • 的 Open CV
  • UMat,相当于 cv::UMat
  • 的 Open CV
  • ScalarArray,可用于将标量转换为 IInputArray
  • VectorOf{XXX},这是 C++ 标准向量的接口