我正在使用 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
。
我找到了以下有效的解决方案,感谢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
}