2016-04-21 77 views
1

我正在製作一個應用程序,使用網絡攝像頭檢測魔方的面部。我可以將過濾器應用於blob,但不知道如何獲取每個blob的顏色。提取顏色Aforge.NET rubik的立方體

我到處搜索沒有成功。我使用Visual Studio 2015年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

歡迎堆棧溢出像素的顏色!您應該發佈您遇到問題的[mcve](http://stackoverflow.com/help/mcve),否則我們無法爲您提供幫助。 – yuyoyuppe

回答

0

容易,,創建要在開始處理之前,創造加工副本(臨時),則在處理得到處理圖像的位圖(來源)在團塊的矩形的中點,並使用此

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

它會回報你正在尋求