使用 ImageMagick 组合来自单独图像的 RGB 通道

问题描述 投票:0回答:2

我正在尝试使用 ImageMagick 组合来自 3 个独立图像的 RGB 通道。红色通道来自 image01.png,蓝色通道来自 image02.png,绿色通道来自 image03.png

图片01.png、图片02.png、图片03.png

enter image description here enter image description here enter image description here

生成的图像应该看起来像这样(左),但我得到的是这个(右):

enter image description here enter image description here

这是我正在运行的命令......

"C:/ImageMagick/magick.exe" convert "C:/images/image01.png" "C:/images/image02.png" "C:/images/image03.png" "-background" "#ff0000" "-channel" "red,green,blue" "-combine" "C:/images/combined.png"

我是否需要以某种方式先保存每个图像分离的各个通道,然后再组合图像?

cmd command-line imagemagick
2个回答
1
投票

在 ImageMagick 中,-channel 无法从多个图像中选择通道。

更重要的是,白色包含红、绿、蓝。因此,第一张图像的红色通道将红点设置为白色,将背景设置为白色,将绿色和蓝色线保留为黑色。其他图像中也类似。因此,每个图像中的白色需要变成黑色。然后通道被分离并重新组合。然后黑色需要再次变成白色。

Unix 语法:

convert \
\( image01.png -fuzz 70% -fill black -opaque white \
-channel r -separate +channel \) \
\( image02.png -fuzz 70% -fill black -opaque white \
-channel g -separate +channel \) \
\( image03.png -fuzz 70% -fill black -opaque white \
-channel b -separate +channel \) \
-set colorspace sRGB -combine \
-fuzz 20% -fill white -opaque black \
result.png

Windows 语法:
convert.exe ^
( image01.png -fuzz 70% -fill black -opaque white ^
-channel r -separate +channel ) ^
( image02.png -fuzz 70% -fill black -opaque white ^
-channel g -separate +channel ) ^
( image03.png -fuzz 70% -fill black -opaque white ^
-channel b -separate +channel ) ^
-set colorspace sRGB -combine ^
-fuzz 20% -fill white -opaque black ^
result.png

enter image description here

需要 -fuzz 来移除彩色区域边缘周围接近白色的抗锯齿颜色。

从 3 个具有黑色背景而不是白色背景的输入图像开始会更好。那么所有的绒毛、白变黑、黑变白就不再需要了。


0
投票

这是我尽力提供的通用解决方案。

对于每个图像,我创建一个颜色的红色(或绿色或蓝色)蒙版,将其与 Alpha 通道(如果有)结合起来,并通过使用该蒙版作为纯色图像上的 Alpha 通道来创建新图像(-背景红色-alpha 形状)。然后将三幅图像合成在一起。

结果将始终具有 Alpha 通道,即使输入图像没有。

可能有一种更简洁的方式来编写此内容,但我不能保证其正确性。这是我的魔法的极限,但至少它产生了此处给出的示例图像的预期输出。

要独立查看每个颜色提取,您可以在“-background red -alpha shape”之后添加“+write red_channel.png”,以将图像写入文件。

convert \
\( \( image01.png -channel g -separate +channel \) \
\( image01.png -channel b -separate +channel \) \
-compose Lighten -composite \
\( image01.png -channel r -separate -negate +channel \) \
-compose Lighten -composite -negate \
\( image01.png -alpha on -channel a -separate +channel \) \
-compose Darken -composite \
-background red -alpha shape \) \
\( \( image03.png -channel r -separate +channel \) \
\( image03.png -channel b -separate +channel \) \
-compose Lighten -composite \
\( image03.png -channel g -separate -negate +channel \) \
-compose Lighten -composite -negate \
\( image03.png -alpha on -channel a -separate +channel \) \
-compose Darken -composite \
-background lime -alpha shape \) \
-compose multiply -composite \
\( \( image02.png -channel r -separate +channel \) \
\( image02.png -channel g -separate +channel \) \
-compose Lighten -composite \
\( image02.png -channel b -separate -negate +channel \) \
-compose Lighten -composite -negate \
\( image02.png -alpha on -channel a -separate +channel \) \
-compose Darken -composite \
-background blue -alpha shape \) \
-compose multiply -composite result.png
© www.soinside.com 2019 - 2024. All rights reserved.