读取本地存储的一张图片作为减法的背景图片

Read a locally stored image as the background image for subtraction

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

我还没有深入了解,因为该方法的签名与仅接受文件有很大不同。我猜我错过了从 File.ReadIInputArray

的一些转换

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 格式?

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 class 实现了 IInputtArray 和 IOutputArray。