目前我的程序可以打开网络摄像头然后动态捕捉人脸,但是,我不知道如何停止摄像头,因为即使窗户关闭也会继续拍摄脸部。
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);
}
答案 0 :(得分:0)
您已经解决了这个问题,您应该调用Dispose方法。
CameraCapture实现了DisposableObject,你不应该将它作为一个静态变量,而是你应该将它保存为变量并在完成它时进行处理。
我看到你说它“因内存问题而工作但崩溃了”,如果在下面描述内存问题的问题或评论中仍然存在问题。