如何根据现有像素的颜色在 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 正方形。然后将重力设置为“中心”并将输入图像合成到该彩色方块上即可得到您描述的结果。
我想使用 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 正方形。然后将重力设置为“中心”并将输入图像合成到该彩色方块上即可得到您描述的结果。