private Image <Gray, byte> DetectionImage(Image <Bgr, byte> sourceImg, bool debugMode = false)
        {
            Image <Hsv, byte> img = sourceImg.Convert <Hsv, byte>();

            Image <Gray, byte> blue   = ImageTools.FilterColor(img, new Hsv(90, 90, 50), new Hsv(120, 255, 255));
            Image <Gray, byte> green  = ImageTools.FilterColor(img, new Hsv(35, 70, 35), new Hsv(90, 255, 255));
            Image <Gray, byte> yellow = ImageTools.FilterColor(img, new Hsv(10, 70, 127), new Hsv(35, 255, 255));
            Image <Gray, byte> red    = ImageTools.FilterColor(
                img,
                new KeyValuePair <Hsv, Hsv>[] {
                new KeyValuePair <Hsv, Hsv>(new Hsv(0, 85, 80), new Hsv(12, 255, 255)),
                new KeyValuePair <Hsv, Hsv>(new Hsv(150, 85, 80), new Hsv(179, 255, 255))
            }
                );

            DetectionData ddb = ImageTools.DetectSquares(blue, debugMode ? "Blue Debug Window" : "");
            DetectionData ddr = ImageTools.DetectSquares(red, debugMode ? "Red Debug Window" : "");
            DetectionData ddg = ImageTools.DetectSquares(green, debugMode ? "Green Debug Window" : "");
            DetectionData ddy = ImageTools.DetectSquares(yellow, debugMode ? "Yellow Debug Window" : "");

            ddb.RemoveNoises();
            ddr.RemoveNoises();
            ddg.RemoveNoises();
            ddy.RemoveNoises();
            ddb.AddColor(ddr);
            ddb.AddColor(ddg);
            ddb.AddColor(ddy);

            return(ddb.DrawDetection().Convert <Gray, byte>());
        }
Пример #2
0
        private void UpdateImages(string path)
        {
            if (String.IsNullOrWhiteSpace(path))
            {
                sourceImg = new Image <Bgr, byte>(100, 100);
            }
            else
            {
                sourceImg = new Image <Bgr, byte>(imageFilePath);
            }
            var hsvImg = sourceImg.Convert <Hsv, byte>();

            blueImg     = ImageTools.FilterColor(hsvImg, UserSettings.instance.blueMin, UserSettings.instance.blueMax);
            redImg      = ImageTools.FilterColor(hsvImg, UserSettings.instance.RedRange);
            greenImg    = ImageTools.FilterColor(hsvImg, UserSettings.instance.greenMin, UserSettings.instance.greenMax);
            yellowImg   = ImageTools.FilterColor(hsvImg, UserSettings.instance.yellowMin, UserSettings.instance.yellowMax);
            composedImg = ImageTools.CombineMaps(new List <KeyValuePair <Image <Gray, byte>, Bgr> >
            {
                new KeyValuePair <Image <Gray, byte>, Bgr>(blueImg, ImageTools.Colors.Blue),
                new KeyValuePair <Image <Gray, byte>, Bgr>(redImg, ImageTools.Colors.Red),
                new KeyValuePair <Image <Gray, byte>, Bgr>(greenImg, ImageTools.Colors.Green),
                new KeyValuePair <Image <Gray, byte>, Bgr>(yellowImg, ImageTools.Colors.Yellow),
            });

            if (operation == OperationType.Detection)
            {
                DetectionData ddb = ImageTools.DetectSquares(blueImg);
                DetectionData ddr = ImageTools.DetectSquares(redImg);
                DetectionData ddg = ImageTools.DetectSquares(greenImg);
                DetectionData ddy = ImageTools.DetectSquares(yellowImg);

                ddb.RemoveNoises();
                ddr.RemoveNoises();
                ddg.RemoveNoises();
                ddy.RemoveNoises();

                DetectionData common = new DetectionData(ddb);
                common.AddColor(ddr);
                common.AddColor(ddg);
                common.AddColor(ddy);

                composedImg = common.DrawDetection().Convert <Bgr, byte>();
                blueImg     = ddb.DrawDetection();
                redImg      = ddr.DrawDetection();
                greenImg    = ddg.DrawDetection();
                yellowImg   = ddy.DrawDetection();

                this.board = common.CreateBoard();
            }
        }
        private void BoardButton_Click(object sender, RoutedEventArgs e)
        {
            string[]          args = Environment.GetCommandLineArgs();
            Image <Hsv, byte> img  = new Image <Hsv, byte>(args[1]);

            Image <Gray, byte> blue   = ImageTools.FilterColor(img, new Hsv(90, 90, 50), new Hsv(120, 255, 255));
            Image <Gray, byte> green  = ImageTools.FilterColor(img, new Hsv(35, 70, 35), new Hsv(90, 255, 255));
            Image <Gray, byte> yellow = ImageTools.FilterColor(img, new Hsv(10, 70, 127), new Hsv(35, 255, 255));
            Image <Gray, byte> red    = ImageTools.FilterColor(
                img,
                new KeyValuePair <Hsv, Hsv>[] {
                new KeyValuePair <Hsv, Hsv>(new Hsv(0, 85, 80), new Hsv(12, 255, 255)),
                new KeyValuePair <Hsv, Hsv>(new Hsv(150, 85, 80), new Hsv(179, 255, 255))
            }
                );

            DetectionData ddb = ImageTools.DetectSquares(blue);
            DetectionData ddr = ImageTools.DetectSquares(red);
            DetectionData ddg = ImageTools.DetectSquares(green);
            DetectionData ddy = ImageTools.DetectSquares(yellow);

            ddb.RemoveNoises();
            ddr.RemoveNoises();
            ddg.RemoveNoises();
            ddy.RemoveNoises();
            ddb.AddColor(ddr);
            ddb.AddColor(ddg);
            ddb.AddColor(ddy);

            var board = ddb.CreateBoard();
            var di    = ddb.DrawDetection().Bitmap;

            MessageBox.Show("Detected board: " + board.Height + "x" + board.Width);

            ImageTools.ShowInNamedWindow(img.Convert <Bgr, byte>(), "Original");
        }