2016-04-21 23 views
1

Ich mache eine Anwendung, die die Gesichter des Rubiks Cube mit einer Webcam erkennt. Ich kann Filter auf die Blobs anwenden, weiß aber nicht, wie man die Farbe jedes Blobs erhält.Extrahieren von Farbe Aforge.NET rubik's cube

Ich habe überall ohne Erfolg gesucht. Ich benutze Visual Studio 2015 mit Aforge.NET

void Finalvideo_newframe(object sender, NewFrameEventArgs eventArgs) 
    { 
     Bitmap video = (Bitmap)eventArgs.Frame.Clone(); 
     Bitmap video2 = (Bitmap)eventArgs.Frame.Clone(); 


     //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; 
+0

Willkommen bei Stack-Überlauf suchen! Du solltest [mcve] (http://stackoverflow.com/help/mcve) posten, mit denen du Probleme hast, sonst können wir dir nicht helfen. – yuyoyuppe

Antwort

0

leicht ,, eine Bitmap (Quelle) des Bildes erstellen Sie bearbeiten möchten, bevor Sie die Verarbeitung und erstellen Sie eine Kopie (temp) für die Verarbeitung dann zu starten, während eine Verarbeitung erhalten Punkt in der Mitte des Rechtecks ​​des Blobs und verwenden diese

Color color = Source.GetPixel(x, y); 

es wird die Farbe des Pixels zurückkehren Ihre sind