【问题标题】:IInputArray image parameter for face detection in emgucv in c# using haarcascade在 c# 中使用 haarcascade 在 emgucv 中进行人脸检测的 IInputArray 图像参数
【发布时间】:2017-12-14 22:00:38
【问题描述】:

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

【问题讨论】:

    标签: c# visual-studio emgucv


    【解决方案1】:

    新的 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的基类
    • 一个 Mat,它是 cv::Mat 的 Open CV 等价物
    • 一个 UMat,它是 cv::UMat 的 Open CV 等价物
    • ScalarArray,可用于将标量转换为 IInputArray
    • VectorOf{XXX},这是 C++ 标准向量的接口

    【讨论】:

    • 我试图使用 emgu cv 教程中的人脸检测:emgu.com/wiki/index.php/Face_detection 但现在“Emgu.CV.CvEnum.HaarDetectionType.DoCannyPruning”正在抛出错误。
    • 在 DetectMultiScale 内部,我无法使用“Emgu.CV.CvEnum.HaarDetectionType.DoCannyPrunning”参数。那么如何进行 CannyPrunning 呢?
    • 我迷失在同一个功能的 CannyPrunning 中?所以哪里也去不了。但是你说得对,我们可以直接在那个函数中直接使用 emgu cv 的图像格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 2019-03-28
    • 2019-12-01
    • 2014-04-28
    • 2015-03-11
    • 2012-06-25
    相关资源
    最近更新 更多