EmguCV中的图像没有释放资源

本文关键字:释放资源 图像 EmguCV | 更新日期: 2023-09-27 18:16:09

我正在使用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;
        }
    }   

我发现每次我点击按钮,内存下降,不会释放没有应用程序重启。即使我手动处理,内存还是会下降。有趣的是,如果我注释掉thresholbinary步骤,它会正常工作。然而,它仍然需要手动处理。我也试过USING语句,但仍然是一样的。

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

EmguCV中的图像没有释放资源

是的,这样做会耗尽内存。我用你的方法做了5000次迭代,耗尽了32GB的系统。问题是thresholbinary返回另一个图像,你没有采取的图像,所以内存得到分配,但没有办法处理。把

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次,我的内存使用量几乎没有变化。