我通过手机拍摄了倾斜的图像。我想在两侧的两个矩形之间切出图像的部分/部分,以找出它们之间的圆。我有中间部分的所有4个坐标,例如(x0,y0),(x1,y1),(x2,y2),(x3,y3)。

我的图片看起来像
c# - 如何在C#中裁剪倾斜图像-LMLPHP

但是裁剪功能我有类似的东西

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

但以上功能将部分切成矩形,如第一和第二个红色框中所示。
我正在寻找削减第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的产品。库,但它会像下面那样减少药水

c# - 如何在C#中裁剪倾斜图像-LMLPHP

这会扰乱圆形并使其变为椭圆形,这会引起其他计算问题。
请让我知道如何使用4点裁切图像。
还是有任何方法可以通过校正角来校正图像的倾斜度?

最佳答案

如果四边形包含倾斜的边,则生成的变换实际上看起来非常好。

使用此图像:

c# - 如何在C#中裁剪倾斜图像-LMLPHP

通过以下代码进行转换:

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

结果在这张图片:

c# - 如何在C#中裁剪倾斜图像-LMLPHP

我认为这正是您想要的。

诀窍是确保四边形变换使用倾斜的边来避免倾斜。我的观点大致如下:

c# - 如何在C#中裁剪倾斜图像-LMLPHP

关于c# - 如何在C#中裁剪倾斜图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52691543/

10-12 06:36