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