gpt4 book ai didi

c# - 如何在C#中停止相机?使用grabber.dispose时出错

转载 作者:行者123 更新时间:2023-12-03 08:47:44 25 4
gpt4 key购买 nike

我正在用C#开发一个项目。我有一个停止按钮,它调用grabber.dispose,但是当我单击它时,应用程序崩溃并且出现以下错误:

object reference is not set to an instance of object.



FrameGrabber函数应停止程序并将其移至当前帧。

捕获采集卡:
     private void FDButton_Click(object sender, EventArgs e)
{
CameraCapture();
Application.Idle += new EventHandler(FrameGrabber);
//initalize Frame grabber event
FDButton.Enabled = false;
}

private void FrameGrabber(object sender, EventArgs e)
{


currentFrame = grabber.QueryFrame().Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
//convert frame to gray scale
gray = currentFrame.Convert<Gray, Byte>();
//now detect face by using classifier
MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(

face,//name of cascade
1.2,
10,
Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
new Size(20, 20));

//now check each frame of imagebox containing video and detect face
foreach (MCvAvgComp f in facesDetected[0])
{
//if face found increment t
t = t + 1;
//now see result by copying detected face in a frame name as result
result = currentFrame.Copy(f.rect).Convert<Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
//we convert current frame to gray scale and resize to 200x100
//now draw rectangle on detected image
currentFrame.Draw(f.rect, new Bgr(Color.Red), 2);
}



//view currentframe in imported imagebox
DetectionImageBox.Image = currentFrame;



}

相机拍摄功能:
 public void CameraCapture()
{
grabber = new Capture();
grabber.QueryFrame();
}

取消按钮:
        private void FDStopButton_Click(object sender, EventArgs e)
{
grabber.Dispose();

}

最佳答案

这很可能是由于您已订阅Idle事件处理程序而发生的。

Application.Idle += new EventHandler(FrameGrabber);

FrameGrabber仍被订阅,但是通过调用dispose,您已将FrameGrabber设置为空引用,因此当事件触发时,您将获得异常。

您需要取消订阅事件处理程序,因此不会发生这种情况:
   private void FDStopButton_Click(object sender, EventArgs e)
{
Application.Idle -= FrameGrabber;
grabber.Dispose();
}

您可以在此处查看有关退订的更好说明:
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-subscribe-to-and-unsubscribe-from-events

关于c# - 如何在C#中停止相机?使用grabber.dispose时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50084819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com