Click here to Skip to main content
14,664,655 members
Rate this:
Please Sign up or sign in to vote.
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


//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, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100