// 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(); // 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; }
private bool IsNotNumber(Bitmap source) { var template = Resources.PlayerEmpty; var temp = source.Clone() as Bitmap; //Clone image to keep original image var seq = new FiltersSequence(); seq.Add(Grayscale.CommonAlgorithms.BT709); temp = seq.Apply(source); // Apply filters on source image var templ = seq.Apply(template); var templateMatchin = new ExhaustiveTemplateMatching(0.9f); TemplateMatch[] templates; if ( temp.Width < template.Width || temp.Height < template.Height ) { templates = templateMatchin.ProcessImage(templ, temp); } else { templates = templateMatchin.ProcessImage(temp, templ); } var res = templates.Length > 0; template = Resources.PlayerMissing; templ = seq.Apply(template); templateMatchin = new ExhaustiveTemplateMatching(0.9f); TemplateMatch[] templates2; if ( temp.Width < template.Width || temp.Height < template.Height ) { templates2 = templateMatchin.ProcessImage(templ, temp); } else { templates2 = templateMatchin.ProcessImage(temp, templ); } res |= templates2.Length > 0; return(res); }
public Button RecognizeOneButton(Bitmap source, Rectangle rect, string filePath, int id) { var seq = new FiltersSequence(); var card = new Button(source); //Create Card Object card.Rect = rect; seq.Clear(); seq.Add(Grayscale.CommonAlgorithms.BT709); seq.Add(new OtsuThreshold()); source = seq.Apply(source); card.Tip = ScanButtonTip(source); //Scan Rank of non-face card //if (card.Tip == ButtonTip.NOT_RECOGNIZED) //{ // if (!string.IsNullOrEmpty(filePath)) // { // while (File.Exists(filePath + id + ".bmp")) // id++; // top.Save(filePath + id + ".bmp", ImageFormat.Bmp); // } //} return(card); }
private void ProcessFrame() { //Check for preprocess filter & filter to grey if (preFilter != null) { frame_pre = preFilter.Apply(frame_c); frame_gs = gsFilter.Apply(frame_pre); } else { frame_gs = gsFilter.Apply(frame_c); } //Initialise Background if (back == null) { back = (Bitmap)frame_gs.Clone(); } //Process frame for motion diffFilter.OverlayImage = back; frame_processed = diffFilter.Apply(frame_gs); frame_processed = motionFilter.Apply(frame_processed); CheckMotion(); //Update Background morphFilter.OverlayImage = frame_gs; back = morphFilter.Apply(back); }
public static async Task <string> SaveNewPhoto(FileResult photo) { //Save in {App Directory}\img\{GUID}.jpg string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "img", Guid.NewGuid().ToString() + ".jpg"); //Canceled if (photo == null) { return(null); } //Create img folder if needed if (!Directory.Exists(Path.GetDirectoryName(path))) { Directory.CreateDirectory(Path.GetDirectoryName(path)); } //Save the file to folder using (Stream stream = await photo.OpenReadAsync()) using (Bitmap b = (Bitmap)ShimDrawing::System.Drawing.Image.FromStream(stream)) using (Stream img = File.OpenWrite(path)) { FiltersSequence f = new FiltersSequence(); f.Add(new ResizeBilinear(800, (int)(800.0 * b.Height / b.Width))); if (b.Height < b.Width) { f.Add(new RotateBilinear(-90)); } f.Apply(ImageProcessor.Format(b)).Save(img, ShimDrawing::System.Drawing.Imaging.ImageFormat.Jpeg); } return(path); }
public static Task <(Bitmap, string)> DeCaptchAsync(Image img) { return((Task <(Bitmap, string)>)Task.Run(() => { string value; Bitmap bmp = new Bitmap(img); bmp = bmp.Clone(new Rectangle(0, 0, img.Width, img.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb); Erosion erosion = new Erosion(); Dilatation dilatation = new Dilatation(); Invert inverter = new Invert(); ColorFiltering cor = new ColorFiltering(); //cor.Blue = new AForge.IntRange(200, 255); cor.Red = new AForge.IntRange(50, 255); //cor.Green = new AForge.IntRange(200, 255); Opening open = new Opening(); BlobsFiltering bc = new BlobsFiltering() { MinHeight = 10 }; Closing close = new Closing(); GaussianSharpen gs = new GaussianSharpen(); ContrastCorrection cc = new ContrastCorrection(); FiltersSequence seq = new FiltersSequence(gs, inverter, open, inverter, bc, inverter, open, cc, cor, bc, inverter, dilatation); Image image = seq.Apply(bmp); value = OCR((Bitmap)image); return ((Bitmap)image, value); })); }
private Bitmap LimparImagem(Image img) { var imagem = new Bitmap(img); imagem = imagem.Clone(new Rectangle(0, 0, img.Width, img.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb); var inverter = new Invert(); var cor = new ColorFiltering { Blue = new AForge.IntRange(200, 255), Red = new AForge.IntRange(200, 255), Green = new AForge.IntRange(200, 255) }; var open = new Opening(); var bc = new BlobsFiltering(); var gs = new GaussianSharpen(); var cc = new ContrastCorrection(); bc.MinHeight = 10; var seq = new FiltersSequence(gs, inverter, open, inverter, bc, inverter, open, cc, cor, bc, inverter); imagem = seq.Apply(imagem); return(imagem); }
private string reconhecerCaptcha(Image img) { Bitmap imagem = new Bitmap(img); imagem = imagem.Clone(new Rectangle(0, 0, img.Width, img.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb); Erosion erosion = new Erosion(); Dilatation dilatation = new Dilatation(); Invert inverter = new Invert(); ColorFiltering cor = new ColorFiltering(); cor.Blue = new AForge.IntRange(200, 255); cor.Red = new AForge.IntRange(200, 255); cor.Green = new AForge.IntRange(200, 255); Opening open = new Opening(); BlobsFiltering bc = new BlobsFiltering(); Closing close = new Closing(); GaussianSharpen gs = new GaussianSharpen(); ContrastCorrection cc = new ContrastCorrection(); bc.MinHeight = 10; FiltersSequence seq = new FiltersSequence(gs, inverter, open, inverter, bc, inverter, open, cc, cor, bc, inverter); imagem = seq.Apply(imagem); //imagem.Save(Directory.GetCurrentDirectory() + "\\Captcha2.png", System.Drawing.Imaging.ImageFormat.Png); string reconhecido = OCR(imagem); //string reconhecido = ocr.Principal(Directory.GetCurrentDirectory() + "\\Captcha2.png"); return(reconhecido); }
private string reconhecerCaptcha(Image img) { Bitmap _bitmap = new Bitmap(img); _bitmap = _bitmap.Clone(new Rectangle(0, 0, img.Width, img.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb); Erosion erosion = new Erosion(); Dilatation dilatation = new Dilatation(); Invert inverter = new Invert(); ColorFiltering cor = new ColorFiltering(); cor.Blue = new AForge.IntRange(200, 255); cor.Red = new AForge.IntRange(200, 255); cor.Green = new AForge.IntRange(200, 255); Opening open = new Opening(); BlobsFiltering bc = new BlobsFiltering(); Closing close = new Closing(); GaussianSharpen gs = new GaussianSharpen(); ContrastCorrection cc = new ContrastCorrection(); bc.MinHeight = 10; FiltersSequence seq = new FiltersSequence(gs, inverter, open, inverter, bc, inverter, open, cc, cor, bc, inverter); pictureBox1.Image = seq.Apply(_bitmap); string recognedString = OCR((Bitmap)pictureBox1.Image); return(recognedString); }
private void ProcessFrameByRefindedMethod() { ++_frameCount; UnmanagedImage sourceCopy = _currentUnprocessed.Clone(); _currentProcessed = _preprocessingFilters.Apply(sourceCopy); if (_previousProcessed != null && _featureRegion != null) { // track the feature _featureRegion.TrackFeature(_currentProcessed); // update cursor position UpdateCursor(); // draw feature region Rectangle rect = new Rectangle(_featureRegion.Location.ToGDIPoint(), _featureRegion.Size); if (_featureRegion.IsLost) { Drawing.Rectangle(sourceCopy, rect, Color.Red); } else { Drawing.Rectangle(sourceCopy, rect, Color.Green); } RegionPictureBox.Image = _featureRegion.FeatureImage.ToManagedImage(); Invoke(() => AccuracyLabel.Text = string.Format("Last detection accuracy: {0:F4}", _featureRegion.Accuracy)); } _previousProcessed = _currentProcessed; ImageBox.Image = sourceCopy.ToManagedImage(); }
public static Bitmap ApplyFilters(Image img) { Bitmap imagem = new Bitmap(img); imagem = imagem.Clone(new Rectangle(0, 0, img.Width, img.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb); Erosion erosion = new Erosion(); Dilatation dilatation = new Dilatation(); Invert inverter = new Invert(); ColorFiltering cor = new ColorFiltering(); cor.Blue = new AForge.IntRange(200, 255); cor.Red = new AForge.IntRange(200, 255); cor.Green = new AForge.IntRange(200, 255); Opening open = new Opening(); BlobsFiltering bc = new BlobsFiltering(); Closing close = new Closing(); GaussianSharpen gs = new GaussianSharpen(); ContrastCorrection cc = new ContrastCorrection(); bc.MinHeight = 10; FiltersSequence seq = new FiltersSequence(gs, inverter, open, inverter, bc, inverter, open, cc, cor, bc, inverter); var filteredImage = seq.Apply(imagem); return(filteredImage); }
private string reconhecerCaptcha(Image img) { Bitmap imagem = new Bitmap(img); imagem = imagem.Clone(new Rectangle(0, 0, img.Width, img.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb); Erosion erosion = new Erosion(); Dilatation dilatation = new Dilatation(); Invert inverter = new Invert(); ColorFiltering cor = new ColorFiltering(); cor.Blue = new AForge.IntRange(200, 255); cor.Red = new AForge.IntRange(200, 255); cor.Green = new AForge.IntRange(200, 255); Opening open = new Opening(); BlobsFiltering bc = new BlobsFiltering(); Closing close = new Closing(); GaussianSharpen gs = new GaussianSharpen(); ContrastCorrection cc = new ContrastCorrection(); bc.MinHeight = 10; GrayscaleRMY gray = new GrayscaleRMY(); Threshold thr = new Threshold(200); Difference diff = new Difference(dilatation.Apply(imagem)); FiltersSequence seq = new FiltersSequence(diff, inverter, erosion, gray, thr, cc); pictureBox.Image = seq.Apply(imagem); string reconhecido = OCR((Bitmap)pictureBox.Image); return(reconhecido); }
private void button8_Click(object sender, EventArgs e) { FiltersSequence filter = new FiltersSequence(); byte[,] matrix = new byte[3, 3] { { 10, 30, 60 }, { 90, 120, 150 }, { 180, 210, 240 } }; filter.Add(new Grayscale(.3, .59, .11)); filter.Add(new ErrorDiffusionToAdjacentNeighbors( new int[3][] { new int[2] { 5, 3 }, new int[5] { 2, 4, 5, 4, 2 }, new int[3] { 2, 3, 2 } } )); ImgFinal.Image = filter.Apply(minhaImagem); }
public static IEnumerable <Bitmap> GetInnerBlobObjects(this Bitmap iBitmap) { var biggestBlobObject = GetBlobObject(iBitmap); Bitmap grayImage = biggestBlobObject.ToGrayscale(); FiltersSequence sq = new FiltersSequence(); sq.Add(new BradleyLocalThresholding()); sq.Add(new Invert()); Bitmap revorsIMage = sq.Apply(grayImage); var innerBlobs = revorsIMage.GetBlobObjects(new Size(2, 2)); int rCounter = innerBlobs.Count(); return(innerBlobs); //Edges filter1 = new Edges(); //var test3= filter1.Apply(biggestBlobObject); //HomogenityEdgeDetector filter2 = new HomogenityEdgeDetector(); //var tesdasd2 = filter2.Apply(qwe); //DifferenceEdgeDetector filter3 = new DifferenceEdgeDetector(); //var tesdasd322 = filter3.Apply(qwe); //SobelEdgeDetector filter4 = new SobelEdgeDetector(); //var tesdasd3asdas22 = filter4.Apply(qwe); //CannyEdgeDetector filter45 = new CannyEdgeDetector( ); //var tesdasd22 = filter45.Apply(qwe); }
public static Image ToBlackAndWhite(this Image original) { var filtersSequence = new FiltersSequence { Grayscale.CommonAlgorithms.BT709, new OtsuThreshold() }; return(filtersSequence.Apply((Bitmap)original)); }
public static Bitmap ToGrayScale(this Bitmap image) { var seq = new FiltersSequence(); seq.Add(Grayscale.CommonAlgorithms.BT709); //First add GrayScaling filter seq.Add(new OtsuThreshold()); //Then add binarization(thresholding) filter return(seq.Apply(image)); // Apply filters on source image }
public static Image ToGrayScale(this Image original) { var filtersSequence = new FiltersSequence { Grayscale.CommonAlgorithms.BT709 }; return(filtersSequence.Apply((Bitmap)original)); }
public static Image ToGrayScale(this Image original, PixelFormat pixelFormat = PixelFormat.Indexed) { var filtersSequence = new FiltersSequence { Grayscale.CommonAlgorithms.BT709 }; var bitmap = filtersSequence.Apply((Bitmap)original); return(AForge.Imaging.Image.Clone(bitmap, pixelFormat)); }
protected void convertToGrayPicture() { FiltersSequence PigmentFilter = new FiltersSequence(new IFilter[] { Grayscale.CommonAlgorithms.BT709 }); this.image = PigmentFilter.Apply(this.image); }
private void button1_Click(object sender, EventArgs e) { var source = pbSelectedPicture.Image as Bitmap; var seq = new FiltersSequence(); seq.Add(Grayscale.CommonAlgorithms.BT709); //First add grayScaling filter seq.Add(new OtsuThreshold()); //Then add binarization(thresholding) filter var temp = seq.Apply(source); pbProcessedPicture.Image = temp; }
/// <summary> /// Scans and returns suit of card. NOTE : Scans suit of cards that are not face cards /// For recognizing suit, analyzes color and size of suit blob /// </summary> /// <param name="suitBmp">Suit image to be scanned</param> /// <param name="color">Color of card. 'R' means Red, 'B' means black</param> /// <returns>Scanned Suit</returns> private Suit ScanSuit(Bitmap suitBmp, char color) { Bitmap temp = commonSeq.Apply(suitBmp); ExtractBiggestBlob extractor = new ExtractBiggestBlob(); //Extract biggest blob on card temp = extractor.Apply(temp); //Biggest blob is suit blob so extract it Suit suit = Suit.NOT_RECOGNIZED; //Determine type of suit according to its color and width if (color == 'B') { suit = temp.Width <= 45 ? Suit.Spades : Suit.Clubs; } if (color == 'R') { suit = temp.Height >= 53 ? Suit.Diamonds : Suit.Hearts; } return(suit); }
public System.Drawing.Bitmap getGrayPicture() { System.Drawing.Bitmap cloneImage = AForge.Imaging.Image.Clone(this.image); FiltersSequence PigmentFilter = new FiltersSequence(new IFilter[] { Grayscale.CommonAlgorithms.BT709 }); cloneImage = PigmentFilter.Apply(cloneImage); this.grayImageByte = this.imageToByteArray(cloneImage); return(cloneImage); }
// Process max 200 frames (5 min) in 320x240 resolution. So 76KB memory per frame (grayscale). 1200 frames is max 93 MB of RAM (normally less because of area) private void processFilePart() { int nrofframes = imageStack.Length; int i; int sum; // create filters Morph morphFilter = new Morph(); // filter for adapting background morphFilter.SourcePercent = 0.8; Difference differenceFilter = new Difference(); // filter for subtracting two frames Threshold thresholdFilter = new Threshold(); // filter for thresholding FiltersSequence filters = new FiltersSequence(); // all filters in one filters.Add(morphFilter); filters.Add(differenceFilter); filters.Add(thresholdFilter); thresholdFilter.ThresholdValue = threshold; // Process here for (i = 0; i < nrofframes; i++) { // move background towards current frame morphFilter.OverlayImage = imageStack[i]; Bitmap Temp = morphFilter.Apply(backgroundFrame); backgroundFrame = Temp.Clone(new Rectangle(0, 0, Temp.Width, Temp.Height), Temp.PixelFormat); Temp.Dispose(); // apply rest of the filters differenceFilter.OverlayImage = imageStack[i]; Bitmap Temp2 = filters.Apply(backgroundFrame); sum = 0; // Calculate sum of white pixels for (int j = 0; j < Temp2.Width; j++) { for (int k = 0; k < Temp2.Height; k++) { if (Temp2.GetPixel(j, k) != Color.FromArgb(255, 0, 0, 0)) { sum += 1; } } } Temp2.Dispose(); if (sum > objectsize) { tracker.addFrame(currentFrame); } currentFrame += 1; } // Discard Array for (i = 0; i < nrofframes; i++) { imageStack[i].Dispose(); } }
private IEnumerable <BobbyLocation> PointOfScreenDifferences() { var castbmp = Win32.CaptureWindow(_wow); var processingFilter = new FiltersSequence { new Grayscale(0.3725, 0.6154, 0.0121), new Pixellate(), new Difference(_background), new Threshold(15), new Erosion() }; var blobCounter = new BlobCounter(); blobCounter.ProcessImage(processingFilter.Apply(castbmp)); var brl = blobCounter.GetObjectsRectangles(); Log.Information("Bobber imagescan brl: {brl}", brl.Length); var sdl = new List <BobbyLocation>(); foreach (var br in brl) { var pt = new Win32.Point { x = (br.Left + br.Left + br.Right) * 4 / 12, y = (br.Top + br.Bottom + br.Bottom) * 4 / 12 }; Win32.ClientToScreen(_wow, ref pt); if (br.Right - br.Left > 9 && br.Bottom - br.Top > 9) { // Win32.Point pt = new Win32.Point { x= wowRectangle.X+(br.Left + br.Right) / 2, y= wowRectangle.Y+(br.Top+br.Bottom)/2 }; Log.Information("Bobber imagescan br: {bx},{by} - {w},{h}", pt.x, pt.y, br.Right - br.Left, br.Bottom - br.Top); sdl.Add(new BobbyLocation(pt)); // } else { // Log.Information("Bobber imagescan ignore br: {bx},{by} - {w},{h}", pt.x,pt.y, (br.Right-br.Left),(br.Bottom-br.Top)); } } // debug /* * BitmapExt bmpDst = new BitmapExt(castbmp); * using (var g = Graphics.FromImage(bmpDst)) { * foreach (var br in brl) { * if ((br.Right - br.Left) > 11 && (br.Bottom - br.Top) > 11) { * g.DrawRectangle(Pens.White, br); * } * } * } * bmpDst.Save("sc_"+DateTime.UtcNow.Ticks+".png", ImageFormat.Png); */ return(sdl); }
/// <summary> /// </summary> /// <param name="bundle"> /// </param> protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource this.SetContentView(Resource.Layout.Main); // Load image var filters = new FiltersSequence(Grayscale.CommonAlgorithms.BT709, new ResizeBicubic(512, 512)); var tmp = (System.Drawing.Bitmap)BitmapFactory.DecodeResource(this.Resources, Resource.Drawable.lena512); this.lenna = filters.Apply(tmp.Clone(PixelFormat.Format32bppArgb)); this.transformImage = this.FindViewById <ImageView>(Resource.Id.TransformImage); this.transformImage.SetImageBitmap((Android.Graphics.Bitmap) this.lenna); // Populate the transforms spinner this.transformsSpinner = this.FindViewById <Spinner>(Resource.Id.TransformSpinner); var transformsAdapter = ArrayAdapter.CreateFromResource( this, Resource.Array.Transforms, Android.Resource.Layout.SimpleSpinnerItem); transformsAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); this.transformsSpinner.Adapter = transformsAdapter; // Configure the iterations spinner this.iterationsSpinner = this.FindViewById <Spinner>(Resource.Id.IterationsSpinner); var iterationsAdapter = ArrayAdapter.CreateFromResource( this, Resource.Array.Iterations, Android.Resource.Layout.SimpleSpinnerItem); iterationsAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); this.iterationsSpinner.Adapter = iterationsAdapter; // Define click handlers var forwardButton = this.FindViewById <Button>(Resource.Id.ForwardButton); forwardButton.Click += this.ForwardButtonOnClick; var backwardButton = this.FindViewById <Button>(Resource.Id.BackwardButton); backwardButton.Click += this.BackwardButtonOnClick; var originalButton = this.FindViewById <Button>(Resource.Id.OriginalButton); originalButton.Click += this.OriginalButtonOnClick; }
private void btnCardRank_Click(object sender, EventArgs e) { var image = Bitmap.FromFile(tbFile.Text) as Bitmap; Crop crop = new Crop(_settings.MyCardsRect);//TODO card identity var source = crop.Apply(image); FiltersSequence seq = new FiltersSequence(); seq.Add(Grayscale.CommonAlgorithms.BT709); //First add grayScaling filter seq.Add(new OtsuThreshold()); //Then add binarization(thresholding) filter var temp = seq.Apply(source); // Apply filters on source image BlobCounter extractor = new BlobCounter(); extractor.FilterBlobs = true; extractor.MinWidth = extractor.MinHeight = (int)_settings.MinCardSize;//TODO card size //extractor.MaxWidth = extractor.MaxHeight = 70;//TODO card size extractor.ProcessImage(temp); //Will be used transform(extract) cards on source image //QuadrilateralTransformation quadTransformer = new QuadrilateralTransformation(); Bitmap cardImg = null; foreach (Blob blob in extractor.GetObjectsInformation()) { cardImg = source.Clone(blob.Rectangle, PixelFormat.DontCare); break; } var r = _settings.CardRankRect; var f = new AreaSelectorForm(new Rectangle(r.X * 5, r.Y * 5, r.Width * 5, r.Height * 5)); f.Text = "Select CardRankRect rect"; f.SetImage(cardImg, 5); if (f.ShowDialog() == DialogResult.OK) { var newRect = new Rectangle( (int)Math.Round(f.Rect.X / 5.0), (int)Math.Round(f.Rect.Y / 5.0), (int)Math.Round(f.Rect.Width / 5.0), (int)Math.Round(f.Rect.Height / 5.0)); lblCardRank.Text = newRect.ToString(); _settings.CardRankRect = newRect; AppSettingsManager.Save(_settings); } }
private void Tec1_Click(object sender, EventArgs e) { FiltersSequence filter = new FiltersSequence(); byte[,] matrix = new byte[3, 3] { { 10, 30, 60 }, { 90, 120, 150 }, { 180, 210, 240 } }; filter.Add(new Grayscale(.3, .59, .11)); filter.Add(new OrderedDithering(matrix)); ImgFinal.Image = filter.Apply(minhaImagem); }
public List <Bitmap> PreHandle2(Bitmap original) { var preOcr = new FiltersSequence( Grayscale.CommonAlgorithms.RMY, new BradleyLocalThresholding()); var grayscale = preOcr.Apply(original); GrayImg.Source = Bitmap2BitmapImageSource(grayscale); var filter = new BlobsFiltering { CoupledSizeFiltering = true, MinHeight = 6, MinWidth = 6 }; var filterImage = filter.Apply(new Invert().Apply(grayscale)); ThresholdImg.Source = Bitmap2BitmapImageSource(filterImage); var invertImg = new Invert().Apply(filterImage); DoneImg.Source = Bitmap2BitmapImageSource(invertImg); var labels = new ConnectedComponentsLabeling(); labels.BlobCounter.ObjectsOrder = ObjectsOrder.XY; labels.Apply(filterImage); var bitmaps = new List <Bitmap>(); for (int i = 0; i < labels.ObjectCount; i++) { var candidate = labels.BlobCounter.GetObjectsInformation()[i]; var edgePoint = labels.BlobCounter.GetBlobsEdgePoints(candidate); labels.BlobCounter.ExtractBlobsImage(filterImage, candidate, false); if (candidate.Image != null) { var charcter = new Invert().Apply(candidate.Image.ToManagedImage()); var resizer = new ResizeBilinear(10, 10); var finalImage = resizer.Apply(charcter); bitmaps.Add(finalImage); TesseractEngine a = new TesseractEngine(@"./tessdata", "eng", EngineMode.TesseractAndCube); Page p = a.Process(finalImage); TBlock.Text += p.GetText(); } } return(bitmaps); }
//-------------------------------------------------------------------- private void process_motion() { IFilter filt = new GrayscaleY(); currentFrame = filt.Apply(currentFrame); backgroundFrame = filt.Apply(backgroundFrame); FiltersSequence filters = new FiltersSequence(); Morph filt_morph = new Morph(); filt_morph.OverlayImage = currentFrame; Bitmap tmp = filt_morph.Apply(backgroundFrame); filters.Add(new Difference(tmp)); filters.Add(new Threshold(15)); Bitmap tmp1 = filters.Apply(currentFrame); alarm = CalculateWhitePixels(tmp1); }
public static Bitmap ApplyFilters02(Image img) { Bitmap imagem = new Bitmap(img); imagem = imagem.Clone(new Rectangle(0, 0, img.Width, img.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb); GaussianSharpen gs = new GaussianSharpen(); GaussianSharpen sharp = new GaussianSharpen(4, 21); FiltersSequence seq = new FiltersSequence(gs, sharp); var filteredImage = seq.Apply(imagem); return(filteredImage); }