如何在 C# 中裁剪倾斜图像
How to crop tilt image in c#
我有通过手机拍摄的倾斜图像。我想在两侧的两个矩形之间剪切 section/portion 图像以找出它们之间的圆圈。我有中间部分的所有 4 个坐标,如 (x0,y0)、(x1,y1)、(x2,y2)、(x3,y3)。
我的图片看起来像,
但是裁剪功能我有类似的东西
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;
}
但是上面的函数将部分剪切为矩形,如第一个和第二个红色框所示。
我正在寻找代码来剪切第三个红色矩形中显示的部分。我搜索了代码并找到了下面的代码
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。库,但它会像下面那样切割药水
这会扰乱圆的形状并使其变成椭圆,从而导致其他计算出现问题。
请告诉我如何使用 4 点裁剪图像。
或者有什么方法可以通过校正角度来校正图像的倾斜吗?
如果四边形包含有角度的边,则转换后的结果实际上看起来还不错。
使用这张图片:
通过此代码转换:
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");
这张图片中的结果:
我想这正是您要找的。
诀窍是确保四边形变换使用倾斜的边来避免倾斜。我的观点大致是这样的:
我有通过手机拍摄的倾斜图像。我想在两侧的两个矩形之间剪切 section/portion 图像以找出它们之间的圆圈。我有中间部分的所有 4 个坐标,如 (x0,y0)、(x1,y1)、(x2,y2)、(x3,y3)。
我的图片看起来像,
但是裁剪功能我有类似的东西
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;
}
但是上面的函数将部分剪切为矩形,如第一个和第二个红色框所示。
我正在寻找代码来剪切第三个红色矩形中显示的部分。我搜索了代码并找到了下面的代码
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。库,但它会像下面那样切割药水
这会扰乱圆的形状并使其变成椭圆,从而导致其他计算出现问题。
请告诉我如何使用 4 点裁剪图像。
或者有什么方法可以通过校正角度来校正图像的倾斜吗?
如果四边形包含有角度的边,则转换后的结果实际上看起来还不错。
使用这张图片:
通过此代码转换:
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");
这张图片中的结果:
我想这正是您要找的。
诀窍是确保四边形变换使用倾斜的边来避免倾斜。我的观点大致是这样的: