// 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; }
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; }
// 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(); }