【问题标题】:Crop white space around black image based on color根据颜色裁剪黑色图像周围的空白区域
【发布时间】:2021-07-16 08:05:30
【问题描述】:

我使用 Imaemagick 和 c# 并想知道: 是否可以在没有精确尺寸的情况下将图像裁剪到边框? 从第一到第二? First image

Second

【问题讨论】:

  • 我看不出你的第一张和第二张图片有什么区别。
  • 因为他们有白色背景
  • 转换 1.png -trim final.png

标签: c# imagemagick imagemagick-convert


【解决方案1】:

要删除数独方块周围的空白,您可以遍历像素。由于图像是黑白的,因此我们可以检查任何 R、G 或 B 值何时下降到某个白色阈值以下并变为黑色。

在本例中,我只是使用任意 200 值进行检查。

我从左上角和右下角走进去。仅当您的图像始终是完美的正方形时,这才有效。但您可以轻松调整此代码以更准确地检查坐标以满足您的目的。

using (var image = new Bitmap(Image.FromFile("firstImage.jpg")))
{
    int topX = 0, topY = 0;
    int bottomX = image.Width - 1, bottomY = image.Height - 1;

    var color = image.GetPixel(topX, topY);

    while(color.R > 200)
        color = image.GetPixel(++topX, ++topY);

    color = image.GetPixel(bottomX, bottomY);

    while(color.R > 200)
        color = image.GetPixel(--bottomX, --bottomY);

    Bitmap croppedImage = new Bitmap(image);
    Rectangle cropRect = new Rectangle(topX, topY, bottomX - topX + 1, bottomY - topY + 1);
    croppedImage = croppedImage.Clone(cropRect, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    croppedImage.Save("firstImageNoBorder.jpg");
}

原文:

裁剪:

【讨论】: