0

我目前使用 Irfanview 来批量替换背景并裁剪生成的图像。然后我调整它们的大小和画布,以获得在我的网站上使用的很好的标准。

我一直在尝试将近乎白色的背景替换为清晰的白色。其中大约一半的处理没有问题,但是当背景中有一个小斑点时,裁剪工具会做出反应,就好像它是主图像的一部分,但事实并非如此。如果我进一步增加容忍度,它会吃掉主图像,结果还不够好,无法发布。

在我开始更换背景之前,是否有一种解决方法可以先删除这些斑点?

PS:现在我正在离线进行所有这些操作。如果有必要,我可以把它移到网上,那时我更喜欢 php,因为它是我最熟悉的语言

源图像 (4752x3168, 3.40 MB):源图像 http://veilinghuiseeckhout.be/test/img/TEST00001.JPG

现在的结果(800x800, 136kB):结果图像 http://veilinghuiseeckhout.be/test/img/TEST00001res.JPG

所需结果(800x800,394kB):所需图像 http://veilinghuiseeckhout.be/test/img/TEST00001want.jpg

4

1 回答 1

1

我不知道Irfanview,因为我倾向于使用ImageMagick免费且可用于 Windows、OSX、Linux 等的。它也可以从命令行轻松编写脚本。

由于您有一些相当大的灰尘斑点,我的方法是在裁剪之前将图像严重模糊并将其阈值设置为纯黑白以获得裁剪坐标,然后继续裁剪未模糊的原始图像。在命令提示符下看起来像这样:

convert original.jpg -blur 0x8 -threshold 80% -format "%@" info:
1185x1157+1615+947

那就是说... “将原件进行大量模糊处理,然后将所有低于 80% 的白色设置为纯黑色,将所有高于 80% 的白色设置为纯白色。然后假装我要裁剪并告诉我你会在哪里裁剪。 "

答案意味着ImageMagick现在将裁剪一个 1185 像素宽 x 1157 像素高的矩形,从左边距开始 1615 像素,从上边缘开始 947 像素。

如果我现在在原始图像上绘制红色:

convert original.jpg -stroke red -fill none -draw "rectangle 1615,947 2799,2103" result.jpg

在此处输入图像描述

或者,我实际上也可以将其裁剪出来:

convert original.jpg -crop 1185x1157+1615+947 result.jpg

在此处输入图像描述

我的 Windows 技能有限,但在 BAT 文件中,裁剪将如下所示:

FOR /F %%G IN ('convert original.jpg -blur 0x8 -threshold 80%% -format "%%@" info:') DO SET GEOM=%%G
ECHO %GEOM%
convert original.jpg -crop %GEOM% result.jpg

另一种选择可能是将高度和宽度减小 10 或 20 倍以使斑点消失,获取裁剪矩形,然后将其缩放相同的因子并应用于原始图像。

另一种选择是使用 ImageMagick 进行“连接组件分析”,因此请告诉我上述答案是否适用于您的其他图像,如果不适用,我们可以开发其他想法。

于 2015-12-26T23:19:13.323 回答