Как обрезать наклонное изображение в C # - PullRequest
0 голосов
/ 07 октября 2018

У меня есть захват изображения наклона на мобильный.Я хочу разрезать участок / часть изображения между двумя прямоугольниками с обеих сторон, чтобы найти круги между ними.У меня есть все 4 координаты средней части, такие как (x0, y0), (x1, y1), (x2, y2), (x3, y3).

Мое изображение выглядит так, enter image description here

Но функция обрезки у меня есть что-то вроде

public static Bitmap CropImage(int x, int y, int width, int height, Bitmap bitmap)
{

    Bitmap croppedImage;
    var originalImage = bitmap;
    {
        Rectangle crop = new Rectangle(x, y, width, height);
        croppedImage = originalImage.Clone(crop, originalImage.PixelFormat);

    } // Here we release the original resource - bitmap in memory and file on disk.

    return croppedImage;
}  

Но выше функция обрезает часть как прямоугольниккак показано в 1-й и 2-й красной рамке.
Я ищу код для вырезания части, показанной в 3-м красном прямоугольнике.У меня был поиск по коду и выяснение ниже кода

List<IntPoint> corners = new List<IntPoint>();

corners.Add(new IntPoint(x0, y0));
corners.Add(new IntPoint(x3, y3));
corners.Add(new IntPoint(x1 + 30, y1 + 20));
corners.Add(new IntPoint(x2 + 30, y2 + 0));
AForge.Imaging.Filters.QuadrilateralTransformation filter = new AForge.Imaging.Filters.QuadrilateralTransformation(corners, WidthOfCut, HeightOfCut);
Bitmap newImage = filter.Apply(mainOuterWindow);

AForge.Imaging.библиотека, но она будет резать зелье, как показано ниже:

enter image description here

, которые нарушают форму круга и делают его эллипсом, что вызывает проблемы для других вычислений.
пожалуйста, дайтеЯ знаю, как обрезать изображение, используя 4 точки.
Или есть ли способ исправить наклон изображения, передавая угол коррекции?

1 Ответ

0 голосов
/ 10 октября 2018

Если четырехугольник включает в себя угловые стороны, результирующее преобразование на самом деле выглядит довольно хорошо.

Использование этого изображения:

enter image description here

Преобразованопо этому коду:

        var i = Image.FromFile("pic.png");

        List<IntPoint> corners = new List<IntPoint>();
        corners.Add(new IntPoint(63, 183));
        corners.Add(new IntPoint(863, 151));
        corners.Add(new IntPoint(869, 182));
        corners.Add(new IntPoint(65, 211));
        QuadrilateralTransformation filter = new QuadrilateralTransformation(corners, 869 - 63, 211 - 183);
        var i2 = filter.Apply(i);

        i2.Save("pic2.png");

Результаты на этом изображении:

enter image description here

Я думаю, это именно то, что вы ищете.

Хитрость заключалась в том, чтобы четырехугольное преобразование использовало угловые стороны, чтобы избежать перекоса.Мои очки выглядят примерно так:

enter image description here

...