Click here to Skip to main content
15,887,843 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
C#
I am making an application that detects the faces of the Rubik's Cube using a webcam. I can apply filters to the blobs, but do not know how to get the color of each blob.

I have searched everywhere without success. I use C# Visual Studio 2015 with Aforge.NET


C#
//Create color filter
        HSLFiltering HslFilter = new HSLFiltering();
        //configre the filter
        HslFilter.Hue = new IntRange(minMat, maxMat);
        HslFilter.Saturation = new Range(minSat, maxSat);
        HslFilter.Luminance = new Range(minLum, maxLum);
        //apply color filter to the image
        HslFilter.ApplyInPlace(video2);
        Grayscale grayFilter = Grayscale.CommonAlgorithms.BT709;
        Bitmap grayImage = grayFilter.Apply(video2); 

        //display Image
        BlobCounter blobcounter = new BlobCounter();
        BlobsFiltering filtroTamaño = new BlobsFiltering();
        //ConnectedComponentsLabeling filtroColor = new ConnectedComponentsLabeling();
        CannyEdgeDetector filtroEsquinas = new CannyEdgeDetector();
        BlobCounterBase bc = new BlobCounter();

        blobcounter.FilterBlobs = true;
        blobcounter.MinHeight = 30;
        blobcounter.MinWidth = 30;
        blobcounter.MaxHeight = 70;
        blobcounter.MaxHeight = 70;
        //filtroTamaño.MinHeight = 30;
        //filtroTamaño.MinWidth = 30;
        //filtroTamaño.MaxHeight = 70;
        //filtroTamaño.MaxWidth = 70;
        blobcounter.ObjectsOrder = ObjectsOrder.YX;
        //locate blobs
        //filtroTamaño.ApplyInPlace(grayImage);
        blobcounter.ProcessImage(grayImage);
        //filtroColor.Apply(grayImage);
        //filtroEsquinas.ApplyInPlace(grayImage);

        BitmapData objectsData = video.LockBits(new Rectangle(0, 0, video.Width, video.Height),
              ImageLockMode.ReadOnly, video.PixelFormat);

        video.UnlockBits(objectsData);

        Rectangle[] rects = blobcounter.GetObjectsRectangles();
        for (int i = 0; rects.Length > i; i++)
        {
            Rectangle objectRect1 = rects[i];

            Graphics g = Graphics.FromImage(video);
            //Graphics g = video.CreateGraphics()
            using (Pen pen = new Pen(Color.Red, 3))
            {

                if (checkSeguimiento.Checked)
                {
                    g.DrawRectangle(pen, objectRect1);
                    PointF drawPoin = new PointF(objectRect1.X, objectRect1.Y);
                    int objectX = objectRect1.X + objectRect1.Width / 2 - video.Width / 2;
                    int objectY = video.Height / 2 - (objectRect1.Y + objectRect1.Height / 2);
                    String Blobinformation = "X= " + objectX.ToString() + "\nY= " + objectY.ToString() + "\nSize=" + objectRect1.Size.ToString();
                    //g.DrawString(Blobinformation, new Font("Arial", 12), new SolidBrush(Color.Blue), drawPoin);
                    g.DrawString((i + 1).ToString(), new Font("Arial", 12), Brushes.Red, objectRect1);
                }


            }
            g.Dispose();
        }
        pictureBox1.Image = video;
        pictureBox2.Image = grayImage;


What I have tried:

Extract blob's image. I need to detect the colors of the faces of the Rubik's Cube
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900