如何根据现有像素的颜色在 Imagemagick mogrify 中指定背景?

How can I specify a background in Imagemagick mogrify based on the colour of an existing pixel?

我想使用 mogrify 将大量图像的背景颜色设置为特定像素处的任何颜色,使它们成为正方形。

绝大多数在图像背景中具有单一颜色,或者是单一颜色前面的照片(因此阴影等只有轻微变化)。

(在这种情况下的具体目的是使图像的大小和正方形都相同,以进行 StyleGAN2-ADA 训练,因此我想尽可能避免使用大的“信箱”矩形,因为鉴别器会将其视为与图像相关,其中近似匹配的更淡入的背景更有可能被忽略。具体来说,我有数千张来自各种来源的单个玩偶和可动人偶的图片,其中一些被“修剪掉”以具有真正的纯色背景,其他背景反对纯色 tables/walls/etc,例如来自 eBay 图片等。)

由于它们在图像背景中的颜色并不都相同(图像中的颜色,与 ImageMagick 术语中的 'background colour' 设置相反),我需要采样一个像素并设置背景,但我无法弄清楚如何。我根据用于将整个图像设置为一种颜色的方法进行了尝试,但无济于事。

我试过:

mogrify -verbose -resize 1024x1024 -gravity center -background 'p{10,10}' -extent 1024x1024 -resize 256x256 *.jpg

mogrify -verbose -resize 1024x1024 -gravity center -background "%[pixel:p{10,10}]" -extent 1024x1024 -resize 256x256 *.jpg

而且都不起作用。我在文档中找不到任何其他可能性。

编辑添加:在测试各种命令时,我遇到了一种修改原始命令的方法,使其可以在 IMv6.8 之前的 ImageMagick 版本上运行。

mogrify -resize 1024x1024 -set background "%[pixel:p{10,10}]" \
     -gravity center -extent 1024x1024 -resize 256x256 *.jpg

显着差异是以一种不寻常的方式设置背景颜色。此命令使用 -set background <color> 而不是正常选项 -background <color>。然后在“mogrify”命令中使用 +10+10 颜色作为背景,它的行为与预期一致。

对于 ImageMagick v7 使用 magick mogrify 而不是 mogrify.

以下是我的原回答。 IMv6“转换”的建议对于某些工作流程可能非常有用,但上面的答案似乎是最简单、最直接的途径。


上一个答案:

ImageMagick v6 不会对颜色进行内联解析,但有一些方法可以获得相同的结果,通常是在 shell 的“for”循环中使用 IM 的“转换”。我不知道您使用的是哪个 shell,所以我不知道您如何编写“for”循环,但是 运行 每个图像循环内的这个命令应该给您您描述的结果...

convert $image -resize 1024x1024 ( +clone -crop 1x1+10+10 ) +swap \
    -resize 1024x1024 -gravity center -composite -resize 256x256 $image

读入图像,调整大小,在括号内创建一个克隆,并提取 +10+10 处的像素。在括号之后,单个像素的大小被调整为 1024x1024 正方形。然后将重力设置为“中心”并将输入图像合成到该彩色方块上即可得到您描述的结果。