Weiße blob-Erkennung
Ich versuche zu verwenden AForge.NET zu erkennen, dass eine Dicke weiße Linie, die über ein Bild.
Es ist wie Pfeife, die ich bekommen und es ist mein gewünschtes Ergebnis nach der Anwendung eines Schwellwert-filter.
Weiß ich, wie die Umrisse zu erkennen, und ich mache das schon, aber das passt nicht unter jeder Form, da es keine Kanten und ist nicht ein Kreis.
Habe ich Beispielcode von der Erkennung ein gleichseitiges Dreieck Formen, aber ich weiß nicht, ob das relevant ist.
public void DetectQuadrilateralType(Bitmap bitmap)
{
BlobCounter blobCounter = new BlobCounter();
blobCounter.ProcessImage(bitmap);
Blob[] blobs = blobCounter.GetObjectsInformation();
//Graphics object to draw
Pen pen;
Graphics g = Graphics.FromImage(bitmap);
SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
for (int i = 0; i < blobs.Length; i++)
{
List<IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
List<IntPoint> corners;
if (i < edgePoints.ToArray().Length && i > -1)
{
try
{
if (shapeChecker.IsConvexPolygon(edgePoints, out corners))
{
PolygonSubType subType = shapeChecker.CheckPolygonSubType(corners);
pen = new Pen(colors[subType], 2);
g.DrawPolygon(pen, ToPointsArray(corners));
pen.Dispose();
}
}
catch (Exception e) { }
}
}
g.Dispose();
}
Hier ist das Bild, das ich versuche zu erkennen:
Wenn jemand hat eine Idee, wie ich erkennen kann, dass der weiße blob mit AForge oder sonst mit C#/.NET ich würde es wirklich schätzen.
Den code oben nur erkennt Kanten, so werde es erkennen nur die Form, wenn es eine scharfe Kante hat, dem wird selten der Fall sein.
BEARBEITEN
Ich habe irgendwie das es funktioniert mit der folgenden Methode
public void DetectBigBlobs(Bitmap bitmap)
{
BlobCounter blobCounter = new BlobCounter();
blobCounter.ProcessImage(bitmap);
Rectangle[] rects = blobCounter.GetObjectsRectangles();
//Graphics object to draw
Pen pen = new Pen(Color.Red, 2);
Graphics g = Graphics.FromImage(bitmap);
foreach (Rectangle rect in rects)
{
if (rect.Width > 200 && rect.Height > 150)
{
g.DrawRectangle(pen, rect);
}
}
pen.Dispose();
g.Dispose();
}
Es muss einen besseren Weg, als mit eine Feste Breite (weil Sie kann stark variieren)
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn Sie wollen, um einen markierten Blobs, können Sie diesen code verwenden,
Fragen Sie mich wenn Sie etwas wünschen, unterschiedliche ich werde Ihnen helfen, so viel wie ich kann 🙂