0

我正在使用Emgu.CV并计划使用背景减法。我想做一些相当简单的事情,从我的本地磁盘中读取两个背景图像,并将其中一个用作背景图像,另一个用作覆盖层以与 / 蒙版进行比较。

不过我还没有走多远,因为该方法的签名与仅接受文件有很大不同。我猜我错过了从 aFile.Read到的一些转换IInputArray


IBackgroundSubtractor backgroundSubtractor = new BackgroundSubtractorMOG2();

IInputArray inputImage; // how do I create an instance of an InputArray from a local file?
IOutputArray mask;

backgroundSubtractor.Apply(imputImage, mask);

如何从文件C:\<somepath>\someimage1.png转换为以下格式IInputArray, IOutputArray

4

1 回答 1

1

EmguCv 提供了不同的方法来从文件中加载图像(参见下面的 V1 和 V2)。对于掩码,您只需要定义一个新的 Mat 对象,它会在您调用时自动分配和填充backgroundSubtractor.Apply(input1, mask);

    //V1 load image
    var input1 = new Mat(@"C:\<somepath>\someimage1.png");
    
    //V2 load image
    Mat input2 = CvInvoke.Imread(@"C:\<somepath>\someimage1.png", ImreadModes.AnyColor);
    
    var mask = new Mat();
    IBackgroundSubtractor backgroundSubtractor = new BackgroundSubtractorMOG2();
    backgroundSubtractor.Apply(input1, mask);

Mat 类实现了 IInputtArray 和 IOutputArray。

于 2020-07-10T20:56:04.560 回答