【问题标题】:Can't convert from "Emgu.CV.Image<Emgu.CV.Structure.Gray, byte>[]" to "Emgu.CV.IInputArray"无法从“Emgu.CV.Image<Emgu.CV.Structure.Gray, byte>[]”转换为“Emgu.CV.IInputArray”
【发布时间】:2019-11-21 21:52:45
【问题描述】:

我正在尝试构建一个简单的面部/眼睛检测 Windows 窗体应用程序。我正在使用最新的 EmguCV (4.1.0),但是当我尝试运行下面的代码时,它给了我标题错误。第二个错误涉及图像 ID。

// Declaration at the beginning of the program
FaceRecognition = new EigenFaceRecognizer(80, double.PositiveInfinity); 
FaceDetection = new CascadeClassifier(//Path to .xml haarcascade file);
Faces = new List<Image<Gray, byte>>();
IDs = new List<int>();
Webcam = new VideoCapture(0);
Frame = new Mat();

// Some code and some code

// Image detection and feeding it into the FaceRecognizer

Webcam.Retrieve(Frame);
var imageFrame = Frame.toImage<Gray, byte>();

// Some code (checking if imageFrame might be null etc.)
if (faces.Count() > 0){
   var faces = FaceDetection.DetectMultiScale(imageFrame, 1.3, 5);
   var processedImage = imageFrame.Copy(faces[0]).Resize(128, 150, 
   Emgu.CV.CvEnum.Inter.Cubic);
   Faces.Add(processedImage);
   IDs.Add(Convert.ToInt32(tbID.Text)); // ID for photo recognition (not really 
   neccesary)
}

else
{
   // First method
   var trainingFaces = (IInputArray) Faces; // Can't cast from List<Image<Gray, byte>> to IInputArray
   var trainingIDs = (IInputArray) IDs; // Can't cast from int[] to IInputArray
   FaceRecognition.Train(trainingFaces, trainingIDs);

   // Second method
   var trainingFaces = Faces.toArray();
   var trainingIDs = IDs.toArray();
   FaceRecognition.Train(trainingFaces, trainingIDs); // Can't convert from List<Image<Gray, byte>> to Emgu.CV.IInputArray.

这两种方法都会出错,我真的不知道如何解决。

【问题讨论】:

    标签: c# emgucv face-recognition


    【解决方案1】:

    将训练人脸图像保存为 Mat 列表

    List<Mat> TrainingFaces = new List<Mat>();
    List<int> FaceIDs = new List<int>();
    

    因为 IInputArray 可以构造为 VectorOfMat(Mat[]) 或 VectorOfInt(Int32) 那么它可以作为训练参数传递:

    FaceRecognition.Train( new VectorOfMat(TrainingFaces.ToArray()) , new VectorOfInt( FaceIDs.ToArray()) );
    

    【讨论】:

      【解决方案2】:

      升级或降级您的 Emgu Lib

      <package id="Emgu.CV" version="3.2.0.2721" targetFramework="net48" />
      

      我的代码现在可以用作您的代码。

      【讨论】:

        猜你喜欢
        • 2020-02-09
        • 1970-01-01
        • 2020-07-03
        • 1970-01-01
        • 1970-01-01
        • 2016-01-29
        • 2021-08-26
        • 1970-01-01
        • 2020-06-11
        相关资源
        最近更新 更多