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。很高兴我可以帮助您,请接受答案,以免其他人认为这仍然需要答案