C#Emgucv关闭网络摄像头

时间:2018-06-01 17:17:22

标签: c# webcam 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); 
}

1 个答案:

答案 0 :(得分:0)

您已经解决了这个问题,您应该调用Dispose方法。

CameraCapture实现了DisposableObject,你不应该将它作为一个静态变量,而是你应该将它保存为变量并在完成它时进行处理。

我看到你说它“因内存问题而工作但崩溃了”,如果在下面描述内存问题的问题或评论中仍然存在问题。