2016-04-21 93 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); 

它会回报你正在寻求