使用AForge C#进行网络摄像头运动检测

时间:2017-10-16 18:05:06

标签: webcam detection aforge motion error-code

我正在使用Aforge的动作检测网络摄像头代码。运行程序时,它可以完美运行,但是当编辑libel1"运动检测"和libel2"没有运动检测"它无法运行。为什么呢?

我用于运动检测的代码:

    public Form1()
    {
        InitializeComponent();
    }

    FilterInfoCollection fic;
    VideoCaptureDevice Device;
    MotionDetector motionDetector;
    float f;

    private void Form1_Load(object sender, EventArgs e)
    {
        motionDetector = new MotionDetector(new TwoFramesDifferenceDetector(), new MotionAreaHighlighting());
        fic = new FilterInfoCollection(FilterCategory.VideoInputDevice);
        foreach (FilterInfo item in fic)
        {
            comboBoxDevice.Items.Add(item.Name);
        }
        comboBoxDevice.SelectedIndex = 0;
    }

    private void BtnStart_Click(object sender, EventArgs e)
    {
        Device = new VideoCaptureDevice(fic[comboBoxDevice.SelectedIndex].MonikerString);

        videoSourcePlayer1.VideoSource = Device;
        videoSourcePlayer1.Start();
    }

    private void BtnStop_Click(object sender, EventArgs e)
    {
        videoSourcePlayer1.Stop();
    }

    private void videoSourcePlayer1_NewFrame(object sender, ref Bitmap image)
    {

       if (motionDetector == null) return;

         f = motionDetector.ProcessFrame(image);
       if (f >0)
       {
           label1.ForeColor = Color.Red;
             label1.Text = "Motion Detected";

       }
       else
       {
           label1.ForeColor = Color.Green;
           label1.Text = "No Motion Detected";
       }
    }

    private void timer_Tick(object sender, EventArgs e)
    {
        label3.Text = "Value: " + f.ToString();
    }
}
}

1 个答案:

答案 0 :(得分:0)

我认为您想在检测到运动时在UI中更改标签。如果要在UI中更改标签,则不能在同一线程中运行更改功能。因此,您可以通过定义另一个线程来更改它。只要确保您防止出现比赛情况即可。

// Changing UI Labels (Make thread)
   Label1.Invoke((MethodInvoker)delegate {
          // What do you want to change?
          Label1.Text = "Detecting Motions";
    });