EmguCV 中的图像不释放资源

Images in EmguCV not releasing resources

我正在使用 EmguCV 3.1.0.2282,我发现当我使用图像时,有时它不会释放资源并消耗内存,直到 PC 资源不足并出现内存不足异常被抛出。

这是我在我的应用程序中所做的测试代码。单击该按钮时,将根据内存中现有的位图实例化一个新的本地图像。如果复选框被选中,它将进行手动处理。

    private void button1_Click(object sender, EventArgs e)
    {
        Image<Bgr, Byte> TempImage = new Image<Bgr, Byte>(CurrentLeftBitmap);
        TempImage.ThresholdBinary(new Bgr(2.2, 3.3, 4.4), new Bgr(100.0, 100.0, 100.0));            
        if (checkBox1.Checked)
        {
            TempImage.Dispose();
            TempImage = null;
        }
    }   

我发现每次单击按钮时,内存都会下降,并且在不重新启动应用程序的情况下不会释放。即使我进行手动处理,内存仍然会下降。有趣的是,如果我注释掉 ThresholdBinary 步骤,它就可以正常工作。但是,它仍然需要手动处理。我也试过 USING 语句,但还是一样。

我的问题是,有没有人遇到过类似的情况?实现这些图像对象的正确方法是什么?

是的,这样做会 运行 你失去记忆。我设法耗尽了我的 32GB 系统,对你的方法进行了 5000 次迭代。问题是 ThresholdBinary return 另一个图像,您没有拍摄该图像,因此内存已分配但无法处理。更改

TempImage.ThresholdBinary(new Bgr(2.2, 3.3, 4.4), new Bgr(100.0, 100.0, 100.0));

Image<Bgr, byte> newImage = TempImage.ThresholdBinary(new Bgr(2.2, 3.3, 4.4), new Bgr(100.0, 100.0, 100.0));

会有帮助。

因为他们是当地人,所以 GC 最终会抽空清理他们。但是处理掉东西总是一个好主意。所以我添加了

TempImage.Dispose();
newImage.Dispose();

运行这5000次我的内存占用几乎没有变化