Example #1
0
 private void InitializeStoredFrame()
 {
     stopwatch.Reset(); stopwatch.Start();
     camera.Retrieve(storedFrame, 0);
     CvInvoke.CvtColor(storedFrame, storedFrame, ColorConversion.Bgr2Gray);
     OneSecondIntervalPictureBox.Invoke(new MethodInvoker(delegate() { OneSecondIntervalPictureBox.Image = storedFrame.Bitmap; }));
     maxIntensityPerIteration = 0;
 }
Example #2
0
        private void ProcessFrame(object sender, EventArgs e)
        {
            if (camera != null && camera.Ptr != IntPtr.Zero)
            {
                camera.Retrieve(frame, 0);
                if (storedFrame.Bitmap == null)
                {
                    InitializeStoredFrame();
                }
                CvInvoke.CvtColor(frame, frame, ColorConversion.Bgr2Gray);

                DefaultCameraPictureBox.Invoke(new MethodInvoker(delegate() { DefaultCameraPictureBox.Image = frame.Bitmap; }));

                //It has been timeperstoredupdateinmilliseconds milliseconds
                if (stopwatch.ElapsedMilliseconds > timePerStoredUpdateInMilliseconds)
                {
                    stopwatch.Reset(); stopwatch.Start();
                    camera.Retrieve(storedFrame, 0);
                    CvInvoke.CvtColor(storedFrame, storedFrame, ColorConversion.Bgr2Gray);
                    OneSecondIntervalPictureBox.Invoke(new MethodInvoker(delegate() { OneSecondIntervalPictureBox.Image = storedFrame.Bitmap; }));
                    maxIntensityPerIteration = 0;
                }

                Image <Gray, byte> diff = new Image <Gray, byte>(frame.Bitmap);
                diff = diff.AbsDiff(new Image <Gray, byte>(storedFrame.Bitmap));
                diff = diff.Erode(2);

                intensityContainer.Add(diff.GetAverage().Intensity);

                if (!isRecording && intensityContainer.GetAverage() > intensityToTriggerRecording)
                {
                    InitializeRecording();
                    isRecording = true;
                    if (!emailStopwatch.IsRunning)
                    {
                        SendWarningEmail();
                    }
                    emailStopwatch.Reset();
                }
                else if (isRecording && intensityContainer.GetAverage() < intensityToTriggerRecording / 2)
                {
                    DisableRecordingAndSaveVideo();
                    isRecording = false;
                    emailStopwatch.Start();
                }
                textBox1.Invoke(new MethodInvoker(delegate()
                {
                    if (diff.GetAverage().Intensity > maxIntensityPerIteration)
                    {
                        maxIntensityPerIteration = diff.GetAverage().Intensity;
                        textBox1.Text            = diff.GetAverage().Intensity.ToString();
                    }
                    IntensityContainerAverageTextBox.Text = intensityContainer.GetAverage().ToString();
                }));

                DifferencePictureBox.Invoke(new MethodInvoker(delegate() { DifferencePictureBox.Image = diff.Bitmap; }));

                //Handle emails
                if (emailStopwatch.ElapsedMilliseconds > timeToCollectBeforeEmailInMilliseconds)
                {
                    SendWarningEmail(true);
                    fileNames.Clear();
                    emailStopwatch.Reset();
                }
            }
        }