猿问

C# Emgucv 关闭网络摄像头

目前我的程序可以打开网络摄像头然后动态捕捉人脸,但是,我不知道如何停止相机,因为即使关闭窗户它也会继续捕捉人脸。


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); 

}


侃侃无极
浏览 307回答 1
1回答

一只名叫tom的猫

你已经解决了这个问题,你应该调用 Dispose 方法。CameraCapture 实现了 DisposableObject,您不应将其作为静态变量使用,而应将其保留为变量并在完成后处理。我看到你说它“工作但由于内存问题而崩溃”,如果这仍然是一个问题,请在下面发布一个描述内存问题的问题或评论。
随时随地看视频慕课网APP
我要回答