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;
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