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