c # Обнаружение прямоугольников в изображении - PullRequest
13 голосов
/ 10 мая 2011

Я хочу обнаружить и получить массив Rects, по одному на каждый прямоугольник, на изображении ниже.Как я могу сделать это в C #?

В основном я пытаюсь отсканировать изображение, снятое на экране, и проанализировать массив окон.

Rect, являющийся некоторой формой (xloc, yloc, xsize, ysize) Возвращаемый массив: rectangles= ParseRects (изображение);

image

Ответы [ 2 ]

24 голосов
/ 10 мая 2011

Лучшим вариантом будет использование библиотеки AForge.Net .

Следующий код получен из документации для класса ShapeChecker, и вы можете захотеть взглянуть надокументация для дальнейшего ознакомления.

static void Main(string[] args)
{
    // Open your image
    string path = "test.png";
    Bitmap image = (Bitmap)Bitmap.FromFile(path);

    // locating objects
    BlobCounter blobCounter = new BlobCounter();

    blobCounter.FilterBlobs = true;
    blobCounter.MinHeight = 5;
    blobCounter.MinWidth = 5;

    blobCounter.ProcessImage(image);
    Blob[] blobs = blobCounter.GetObjectsInformation();

    // check for rectangles
    SimpleShapeChecker shapeChecker = new SimpleShapeChecker();

    foreach (var blob in blobs)
    {
        List<IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blob);
        List<IntPoint> cornerPoints;

        // use the shape checker to extract the corner points
        if (shapeChecker.IsQuadrilateral(edgePoints, out cornerPoints))
        {
            // only do things if the corners form a rectangle
            if (shapeChecker.CheckPolygonSubType(cornerPoints) == PolygonSubType.Rectangle)
            {
                // here i use the graphics class to draw an overlay, but you
                // could also just use the cornerPoints list to calculate your
                // x, y, width, height values.
                List<Point> Points = new List<Point>();
                foreach (var point in cornerPoints)
                {
                    Points.Add(new Point(point.X, point.Y));
                }

                Graphics g = Graphics.FromImage(image);
                g.DrawPolygon(new Pen(Color.Red, 5.0f), Points.ToArray());

                image.Save("result.png");
            }
        }
    }
}

Исходный ввод: original input

Результирующее изображение: enter image description here

0 голосов
/ 06 августа 2018

Вы можете увидеть линию Обнаружение по преобразованию Хафа и Угол обнаружения. Некоторые алгоритмы, вероятно, уже были реализованы в C #

...