C#Emgucv关闭网络摄像头
目前,我的程序可以打开网络摄像头,然后动态捕捉人脸,但是,我不知道如何停止摄像头,因为即使窗口关闭,它也会继续捕捉人脸C#Emgucv关闭网络摄像头,c#,webcam,emgucv,C#,Webcam,Emgucv,目前,我的程序可以打开网络摄像头,然后动态捕捉人脸,但是,我不知道如何停止摄像头,因为即使窗口关闭,它也会继续捕捉人脸 private static VideoCapture _cameraCapture; public VideoSurveilance() { InitializeComponent(); Run(); } void Run() { try { _c
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将导致进程帧引用对象为空
void ProcessFrame(object sender, EventArgs e)
{
Mat frame = _cameraCapture.QueryFrame();
Mat smoothedFrame = new Mat();
CvInvoke.GaussianBlur(frame, smoothedFrame, new Size(3, 3), 1);
}
您已经解决了这个问题,应该调用Dispose方法 CameraCapture实现DisposableObject,不应将其作为静态变量,而应将其作为变量保留,并在使用完后进行dispose
我看到你说它“工作但由于内存问题而崩溃”,如果这仍然是一个问题,请在下面发布一个问题或评论,描述内存问题。Thx。是否可以停止ProcessFrame方法?您应该检查\u cameraCapture!=在尝试查询框架之前为null谢谢…问题已解决。正如您所说,我们需要使用if-else语句检查_cameraCapture。很高兴我可以帮助您,请接受答案,以免其他人认为这仍然需要答案