如何将 OpenCvSharp.Mat 转换为 Emgu.CV.Mat?

问题描述 投票:0回答:1

我正在使用 OpenCVSharp 进行图像处理,但现在我还需要 Emgu CV 的一些功能来检测图像中的人脸。

我有以下最小示例:

public static void DetectFace(OpenCvSharp.Mat inputImage)
    var faceDetector = new Emgu.CV.FaceDetectorYN("myTrainingModel", "", new Size(inputImage.Width, inputImage.Height));
    var emguMat = new Emgu.CV.Mat();
    faceDetector.Detect(inputImage, emguMat); // <-- gives error: Argument 1: cannot convert from 'OpenCvSharp.Mat' to 'Emgu.CV.IInputArray'

    // ... more code
}

我得到的错误是:

参数 1:无法从 'OpenCvSharp.Mat' 转换为 'Emgu.CV.IInputArray'

我知道我得到的错误可以通过将

OpenCvSharp.Mat
转换为
Emgu.CV.IInputArray
来解决,但是我更想知道如何将
OpenCvSharp.Mat
转换为
Emgu.CV.Mat
。由于
Emgu.CV.Mat
实现了
Emgu.CV.IInputArray
接口,无论如何我都需要能够在稍后的代码中转换为
Emgu.CV.Mat

c# opencv type-conversion emgucv
1个回答
0
投票

我找到了以下有效的解决方案,感谢wingsziye的分享。

public static void DetectFace(OpenCvSharp.Mat inputImage)
    var faceDetector = new Emgu.CV.FaceDetectorYN("myTrainingModel", "", new Size(inputImage.Width, inputImage.Height));
    var emguMat = new Emgu.CV.Mat();

    // Create an Emgu Mat for the input parameter
    var emguInputImage = new Emgu.CV.Mat();

    // Load the OpenCvSharp.Mat into the new Emgu Mat.
    Emgu.CV.CvInvoke.Imdecode(inputImage.ToBytes(), Emgu.CV.CvEnum.ImreadModes.AnyColor, emguInputImage );
    
    // running face detection on the new Emgu Mat.
    faceDetector.Detect(emguInputImage , emguMat);

    // ... more code
}
© www.soinside.com 2019 - 2024. All rights reserved.