目前我的程序可以打开网络摄像头然后动态捕捉人脸,但是,我不知道如何停止相机,因为即使关闭窗户它也会继续捕捉人脸。private static VideoCapture _cameraCapture;public VideoSurveilance() { InitializeComponent(); Run(); } void Run() { try { _cameraCapture = new VideoCapture(); } catch (Exception e) { MessageBox.Show(e.Message); return; } _fgDetector = new Emgu.CV.VideoSurveillance.BackgroundSubtractorMOG2(); _blobDetector = new CvBlobDetector(); _tracker = new CvTracks(); Application.Idle += ProcessFrame; } private void btnStopCamera_Click(object sender, EventArgs e) { _cameraCapture.Pause();//not working _cameraCapture.Stop();//not working _cameraCapture.Dispose();//worked but crashed due to memory issue this.Close(); faceManipulate fm = new faceManipulate(); fm.Show();内存问题已经解决了。但是,Dispose 会导致流程框架 Null Reference Object。void ProcessFrame(object sender, EventArgs e) { Mat frame = _cameraCapture.QueryFrame(); Mat smoothedFrame = new Mat(); CvInvoke.GaussianBlur(frame, smoothedFrame, new Size(3, 3), 1); }
1 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
你已经解决了这个问题,你应该调用 Dispose 方法。
CameraCapture 实现了 DisposableObject,您不应将其作为静态变量使用,而应将其保留为变量并在完成后处理。
我看到你说它“工作但由于内存问题而崩溃”,如果这仍然是一个问题,请在下面发布一个描述内存问题的问题或评论。
- 1 回答
- 0 关注
- 306 浏览
添加回答
举报
0/150
提交
取消