Emgucv 不释放资源

Emgucv doesn't release resource

我正在使用 EmguCV 3.4.3.3016 从相机抓取帧。下面是每次单击 button1 时简单地抓取一帧的代码。我的问题是该程序不释放资源,因此用于该程序的内存增加非常快(高达 GB)并导致程序无响应然后崩溃。

有谁知道原因和解决方法吗?

private void button1_Click(object sender, EventArgs e)
{
    if (cap != null)
    {
         cap = new VideoCapture(0);
    }

    Mat img = new Mat();
    cap.Grab();
    cap.Retrieve(img);
    pictureBox1.Image = img.Bitmap;
}

我遇到了和你一样的问题。这不是因为您的代码或 EmguCV,而是与您的解决方案的调试设置有关。尝试删除 Tools>Options>Debugging>Suppress JIT optimization on module load.

处的检查

我可以运行 你的代码正常。你有其他依赖吗?您机器的 window 版本是 32 位还是 64 位?尝试在正确的平台上调试它,Debug -> [your-project] Properties -> Build -> Platform target.

原来,EmguCV 只是OpenCV 的包装器,我们需要使用GC.Collect() 手动清理它。

private void button1_Click(object sender, EventArgs e)
        {
            if (cap != null) //Why... Are you sure? Not cap==null ???
            {
                cap.Dispose();
                cap = new VideoCapture(0);
            }


            Mat img = new Mat();
            cap.Grab();
            cap.Retrieve(img);
            if (pictureBox1.Image != null)
            {
                var tempImage = pictureBox1.Image;
                pictureBox1.Image = null;
                tempImage.Dispose();

            }
            pictureBox1.Image =new Bitmap( img.Bitmap);
            img.Dispose();
        }