// Process new frame
        public void ProcessFrame(ref Bitmap image)
        {
            if (backgroundFrame == null)
            {
                // create initial backgroung image
                backgroundFrame = grayscaleFilter.Apply(image);

                // just return for the first time
                return;
            }

            Bitmap tmpImage;

            // apply the the grayscale file
            tmpImage = grayscaleFilter.Apply(image);


            if (++counter == 2)
            {
                counter = 0;

                // move background towards current frame
                moveTowardsFilter.OverlayImage = tmpImage;
                Bitmap tmp = moveTowardsFilter.Apply(backgroundFrame);

                // dispose old background
                backgroundFrame.Dispose();
                backgroundFrame = tmp;
            }

            // set backgroud frame as an overlay for difference filter
            differenceFilter.OverlayImage = backgroundFrame;

            // apply the the filters sequence
            Bitmap tmpImage2 = processingFilter.Apply(tmpImage);

            tmpImage.Dispose();

            // extract red channel from the original image
            Bitmap redChannel = extrachChannel.Apply(image);

            //  merge red channel with moving object borders
            mergeFilter.OverlayImage = tmpImage2;
            Bitmap tmpImage3 = mergeFilter.Apply(redChannel);

            redChannel.Dispose();
            tmpImage2.Dispose();

            // replace red channel in the original image
            replaceChannel.ChannelImage = tmpImage3;
            Bitmap tmpImage4 = replaceChannel.Apply(image);

            tmpImage3.Dispose();

            image.Dispose();
            image = tmpImage4;
        }
Exemple #2
0
        public mCompositeMove(Bitmap UnderlayBitmap, Bitmap OverlayBitmap, int StepSize)
        {
            Step = StepSize;

            BitmapUnder = new mSetFormat(UnderlayBitmap, mFilter.BitmapTypes.Rgb24bpp).ModifiedBitmap;
            BitmapOver  = new mSetFormat(OverlayBitmap, mFilter.BitmapTypes.Rgb24bpp).ModifiedBitmap;

            ModifiedBitmap = BitmapUnder;

            Effect = new MoveTowards(BitmapOver, Step);

            ModifiedBitmap = Effect.Apply(BitmapUnder);
        }
        void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            /*  f = motionDetector.ProcessFrame(video); */

            video = (Bitmap)eventArgs.Frame.Clone();
            Bitmap video2 = (Bitmap)eventArgs.Frame.Clone();



            MoveTowards moveTowardsFilter = new MoveTowards();

            moveTowardsFilter.OverlayImage = video;
            Bitmap tmp = moveTowardsFilter.Apply(video2);

            video2.Dispose();
            video2 = tmp;



            FiltersSequence processingFilter = new FiltersSequence();

            processingFilter.Add(new Difference(video2));
            processingFilter.Add(new Threshold(15));
            processingFilter.Add(new Opening());
            processingFilter.Add(new Edges());



            if (OnOff == true)

            {
                pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
                g = Graphics.FromImage(video2);
                g.DrawString(countdown.ToString(), new Font("Arial", 20), new SolidBrush(Color.Red), new PointF(2, 4));
                g.Dispose();
            }

            if (mode == 1)
            {
                ColorFiltering colorfilter = new ColorFiltering();

                colorfilter.Red   = new IntRange(Red, (int)numericUpDown1Red.Value);
                colorfilter.Green = new IntRange(Green, (int)numericUpDown2Green.Value);
                colorfilter.Blue  = new IntRange(Blue, (int)numericUpDown3Blue.Value);
                colorfilter.ApplyInPlace(video2);

                BlobCounter blobcounter = new BlobCounter();
                blobcounter.MinHeight    = 20;
                blobcounter.MaxWidth     = 20;
                blobcounter.ObjectsOrder = ObjectsOrder.Size;
                blobcounter.ProcessImage(video2);
                Rectangle[] rect = blobcounter.GetObjectsRectangles();
                Graphics    g    = Graphics.FromImage(video2);

                /* if (rect.Length>10)
                 * {*/
                /* Rectangle objec = rect[0];*/
                Graphics graphic = Graphics.FromImage(video2);
                using (Pen pen = new Pen(Color.Red, 1))
                    foreach (Rectangle rec in rect)
                    {
                        g.DrawRectangle(pen, rec);
                        if ((rec.Width > 15) && (rec.Height > 15))
                        {
                        }
                    }
                {
                    /*   graphic.DrawRectangle(pen,objec);*/
                }
                graphic.Dispose();
                /* }*/

                pictureBox2.Image = video2;
            }
            pictureBox1.Image = video;
        }
Exemple #4
0
        // Process new frame
        public void ProcessFrame(ref Bitmap image)
        {
            if (backgroundFrame == null)
            {
                // create initial backgroung image
                backgroundFrame = processingFilter1.Apply(image);

                // just return for the first time
                return;
            }

            Bitmap tmpImage;

            // apply the the first filters sequence
            tmpImage = processingFilter1.Apply(image);

            if (++counter == 2)
            {
                counter = 0;

                // move background towards current frame
                moveTowardsFilter.OverlayImage = tmpImage;
                Bitmap tmp = moveTowardsFilter.Apply(backgroundFrame);

                // dispose old background
                backgroundFrame.Dispose();
                backgroundFrame = tmp;
            }

            // set backgroud frame as an overlay for difference filter
            differenceFilter.OverlayImage = backgroundFrame;

            // apply the the second filters sequence
            Bitmap tmpImage2 = processingFilter2.Apply(tmpImage);

            tmpImage.Dispose();

            // get object rectangles
            Rectangle[] rects = BlobCounter.GetObjectRectangles(tmpImage2);
            tmpImage2.Dispose();

            // create graphics object from initial image
            Graphics g = Graphics.FromImage(image);

            using (Pen pen = new Pen(Color.Red, 1))
            {
                int n = 0;

                // draw each rectangle
                foreach (Rectangle rc in rects)
                {
                    g.DrawRectangle(pen, rc);

                    if ((n < 10) && (rc.Width > 15) && (rc.Height > 15))
                    {
                        g.DrawImage(numbersBitmaps[n], rc.Left, rc.Top, 7, 9);
                        n++;
                    }
                }
            }

            g.Dispose();
        }