コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        public VideoProcessor()
        {
            background = null;

            pixelateFilter           = new Pixellate();
            pixelateFilter.PixelSize = 10;

            differenceFilter = new Difference();
            thresholdFilter  = new Threshold(15);
            grayscaleFilter  = new Grayscale(0.2125, 0.7154, 0.0721);
            erosionFilter    = new Erosion();

            moveTowardsFilter = new MoveTowards();

            filters1 = new FiltersSequence();
            filters1.Add(pixelateFilter);
            filters1.Add(grayscaleFilter);

            filters2 = new FiltersSequence();

            filters2.Add(differenceFilter);
            filters2.Add(thresholdFilter);
            filters2.Add(erosionFilter);

            rat1 = new Tracker(640 / 2, 480 / 2, Color.Red);

            rat2 = new Tracker(400, 300, Color.Green);

            counter = 0;
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
 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);
     }));
 }
コード例 #9
0
        private FiltersSequence commonSeq, extractCodeSeq, extractQRCodeSeqForRedTicket, extractQRCodeSeqForBlueTicket, qrReturnSeq;                          //Commonly filter sequence to be used

        public TicketRecognizer()
        {
            commonSeq      = new FiltersSequence();
            extractCodeSeq = new FiltersSequence();
            extractQRCodeSeqForRedTicket  = new FiltersSequence();
            extractQRCodeSeqForBlueTicket = new FiltersSequence();
            qrReturnSeq = new FiltersSequence();
            commonSeq.Add(new GrayscaleBT709());                            //灰度化
            commonSeq.Add(new SISThreshold());                              //二值化
            commonSeq.Add(new Invert());
            extractCodeSeq.Add(new Mean());                                 //均值滤波
            //extractCodeSeq.Add(new Invert());                            //黑白翻转
            extractQRCodeSeqForRedTicket.Add(new GrayscaleBT709());
            extractQRCodeSeqForRedTicket.Add(new DifferenceEdgeDetector());
            extractQRCodeSeqForRedTicket.Add(new SISThreshold());
            extractQRCodeSeqForRedTicket.Add(new Dilatation());


            extractQRCodeSeqForBlueTicket.Add(new GrayscaleBT709());
            extractQRCodeSeqForBlueTicket.Add(new DifferenceEdgeDetector());
            extractQRCodeSeqForBlueTicket.Add(new SISThreshold());
            extractQRCodeSeqForBlueTicket.Add(new Dilatation());

            qrReturnSeq.Add(new GrayscaleBT709());
            qrReturnSeq.Add(new Blur());
        }
コード例 #10
0
        public CardRecognizer()
        {
            //Initialize common filter sequence , this sequence generally will be applied
            commonSeq = new FiltersSequence();
            commonSeq.Add(Grayscale.CommonAlgorithms.BT709);
            commonSeq.Add(new OtsuThreshold());
            commonSeq.Add(new DifferenceEdgeDetector());

            Stream          strm;
            BinaryFormatter bformat;

            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

            strm    = File.Open("NetworkLetra.net", FileMode.Open);
            bformat = new BinaryFormatter();

            NetworkLetra = (FeedforwardNetwork)bformat.Deserialize(strm);

            strm    = File.Open("NetworkSuits.net", FileMode.Open);
            bformat = new BinaryFormatter();

            NetworkSuits = (FeedforwardNetwork)bformat.Deserialize(strm);

            strm    = File.Open("NetworkNumero.net", FileMode.Open);
            bformat = new BinaryFormatter();

            NetworkNumero = (FeedforwardNetwork)bformat.Deserialize(strm);

            AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
        }
コード例 #11
0
ファイル: ImagemService.cs プロジェクト: OdairDantas/Captcha
        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);
        }
コード例 #12
0
        public FormAForge()
        {
            InitializeComponent();

            context         = new FilterContext();
            filtersSequence = new FiltersSequence();
            filtersSequence.Add(new FilterVisualization(new GrayscaleY(), context));
            filtersSequence.Add(new FilterVisualization(new GaussianBlur(), context));
            filtersSequence.Add(new FilterVisualization(new ResizeBicubic(160, 120), context));

            filtersSequence.Add(new RemoveBackground(context));
            filtersSequence.Add(new Normalization(context));
            filtersSequence.Add(new Binarization(context));
            //filtersSequence.Add(new FilterVisualization(new Invert(), context));
            //filtersSequence.Add(new FilterVisualization(new Opening(), context));
            filtersSequence.Add(new Blobs(context));

            foreach (IFilter filter in filtersSequence)
            {
                FilterVisualization visualization = filter as FilterVisualization;
                if (visualization != null)
                {
                    flowLayoutPanelFilters.Controls.Add(visualization);
                }
            }
        }
コード例 #13
0
ファイル: Form1.cs プロジェクト: Pe11men/RecogCaptcha
        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);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        private FiltersSequence commonSeq;              //Commonly filter sequence to be used
        /// <summary>
        /// Constructor
        /// </summary>
        public CardRecognizer()
        {
            //Initialize common filter sequence , this sequence generally will be applied
            commonSeq = new FiltersSequence();
            commonSeq.Add(Grayscale.CommonAlgorithms.BT709);
            commonSeq.Add(new BradleyLocalThresholding());
            commonSeq.Add(new DifferenceEdgeDetector());


            //Load Templates From Resources ,
            //Templates will be used for template matching
            j        = miranda.ui.Properties.Resources.J;
            k        = miranda.ui.Properties.Resources.K;
            q        = miranda.ui.Properties.Resources.Q;
            clubs    = miranda.ui.Properties.Resources.Clubs;
            diamonds = miranda.ui.Properties.Resources.Diamonds;
            spades   = miranda.ui.Properties.Resources.Spades;
            hearts   = miranda.ui.Properties.Resources.Hearts;


            try
            {
                _engine = new TesseractEngine(@"./tessdata", "rus", EngineMode.Default);
                //_engine.SetVariable("tessedit_char_whitelist", "$.,0123456789");
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.ToString());
                Ex.Report(ex);
            }
        }
コード例 #16
0
ファイル: ImageExtensions.cs プロジェクト: xyyhqq/eXpand
        public static Image ToBlackAndWhite(this Image original)
        {
            var filtersSequence = new FiltersSequence {
                Grayscale.CommonAlgorithms.BT709, new OtsuThreshold()
            };

            return(filtersSequence.Apply((Bitmap)original));
        }
コード例 #17
0
ファイル: ScanTest.cs プロジェクト: rrossenbg/vprint
        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
        }
コード例 #18
0
ファイル: ImageExtensions.cs プロジェクト: xwagner2/eXpand
        public static Image ToGrayScale(this Image original)
        {
            var filtersSequence = new FiltersSequence {
                Grayscale.CommonAlgorithms.BT709
            };

            return(filtersSequence.Apply((Bitmap)original));
        }
コード例 #19
0
ファイル: ImageExtensions.cs プロジェクト: xyyhqq/eXpand
        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));
        }
コード例 #20
0
        protected void convertToGrayPicture()
        {
            FiltersSequence PigmentFilter = new FiltersSequence(new IFilter[]
            {
                Grayscale.CommonAlgorithms.BT709
            });

            this.image = PigmentFilter.Apply(this.image);
        }
コード例 #21
0
        /// <summary>Handles the Load event of the frmBadgeCreator control.</summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void frmBadgeCreator_Load(object sender, EventArgs e)
        {
            lsvFilterStack.Items.Clear();
            filterStack = new FiltersSequence();

            LoadDitheringModes();

            LoadOldSettings();
        }
コード例 #22
0
        private static string ExtractText(Bitmap bmp)
        {
            // create filter
            var resizeBilinear = new ResizeBilinear(bmp.Width * 2, bmp.Height * 2);
            var greyScale      = new Grayscale(0.2125, 0.7154, 0.0721);

            var biggerImage = new FiltersSequence(resizeBilinear).Apply(bmp);

            return(string.Join(", ", TesseractTestBase.ExtractText(biggerImage)));
        }
コード例 #23
0
        private void Init()
        {
            _frameSize = new Size(ImageBox.Width, ImageBox.Height);

            _normalizatorFilters = new FiltersSequence(
                new ResizeBilinear(_frameSize.Width, _frameSize.Height));

            _preprocessingFilters = new FiltersSequence(
                Grayscale.CommonAlgorithms.RMY);
        }
コード例 #24
0
        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;
        }
コード例 #25
0
        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);
        }
コード例 #26
0
        // 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();
            }
        }
コード例 #27
0
        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);
        }
コード例 #28
0
ファイル: Eyes.cs プロジェクト: ztbsuper/UltimateFishbot
        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);
        }
コード例 #29
0
 private void InitFilters()
 {
     gsFilter     = new Grayscale(0.33, 0.33, 0.33);
     diffFilter   = new Difference();
     motionFilter = new FiltersSequence();
     motionFilter.Add(new Threshold(THRESHOLD));
     motionFilter.Add(new BlobsFiltering(MIN_BLOB, MIN_BLOB, MAX_BLOB, MAX_BLOB, true));
     morphFilter = new Morph();
     morphFilter.SourcePercent = MORPH_PERCENT;
     blobCount           = new BlobCounter();
     blobCount.MinHeight = MIN_BLOB;
     blobCount.MaxHeight = MAX_BLOB;
 }
コード例 #30
0
        public static Bitmap FilterImage(Bitmap originalBitmap)
        {
            var bitmap = new Bitmap(originalBitmap);

            var imagem      = bitmap.Clone(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            var colorFilter = new ColorFiltering();

            colorFilter.FillColor = new RGB(255, 255, 255);
            colorFilter.Red       = colorFilter.Green = colorFilter.Blue = new IntRange(0, 40);
            colorFilter.ApplyInPlace(bitmap);
            bitmap = new FiltersSequence(colorFilter, new Invert(), new Erosion()).Apply(imagem);
            return(bitmap);
        }