Estoy tratando de utilizar AForge.NET para detectar una línea blanca gruesa en una imagen.AForge.NET Detección de Blob blanco
Es como la tubería que obtengo y es mi resultado deseado después de aplicar un filtro de umbral.
Sé cómo detectar formas y ya lo estoy haciendo, pero esto no concuerda con ninguna forma ya que no tiene bordes y no es un círculo.
Tengo código de muestra de la detección de formas equiláteras, pero no sé si eso es relevante.
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();
}
Aquí es la imagen que estoy tratando de detectar
http://i206.photobucket.com/albums/bb29/cheater1034/pipe.png
Si alguien tiene alguna idea de cómo puedo detectar que mancha blanca con AForge o de otra manera usando C# /. NET i' Realmente lo aprecio: O
El código anterior solo detecta los bordes, por lo que solo detectará la forma si tiene un borde afilado, lo que rara vez será el caso.
EDITAR
en cierto modo me he que trabajar con el siguiente método
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();
}
Tiene que haber una mejor manera de utilizar anchos fijos (ya que pueden variar en gran medida)