Emgucv不会释放资源

时间:2018-11-15 10:03:39

标签: c# image-processing emgucv

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

enter image description here

有人知道原因和解决方案吗?

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;
}

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我可以正常运行您的代码。您还有其他依赖吗?您计算机的窗口版本是32位还是64位?尝试在正确的平台Debug -> [your-project] Properties -> Build -> Platform target中对其进行调试。

答案 2 :(得分:0)

事实证明,EmguCV只是OpenCV的包装,我们需要使用GC.Collect()手动清理它。

答案 3 :(得分:0)

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();
        }