使用ImageMagick的绿屏色度键

jhl*_*oke 5 imagemagick chromakey

我一直在寻找使用ImageMagick的绿屏色度键的好算法,但到目前为止还没有令人满意的答案.

我想探索一种在HSV/HSB颜色空间中使用范围选择的简单方法(类似于-fuzz)来选择我想要的绿色并使它们透明.-fuzz似乎仅适用于RGB空间,这是不希望的.

任何人都可以教我如何选择具有H,S,V分量的单独范围的颜色,例如,115-125度色调,40%-60%饱和度和30-80%值.

如果还有其他更好的色度键算法,您的建议也非常受欢迎.

提前致谢.

emc*_*lle 4

Imagemagick 的FX可用于生成 Alpha 通道。、huesaturationlightness&luma关键字存在,但您需要value通过 max(r, g, b) 计算颜色。

hueMin=115/360;
hueMax=125/360;
saturationMin=0.40;
saturationMax=0.60;
valueMin=0.30;
valueMax=0.80;
value = max( r, max( g, b ) );
(
  ( hue > hueMin && hue < hueMax ) && (
  ( saturation > saturationMin && saturation < saturationMax ) || 
  ( value > valueMin && value < valueMax ))) ? 0.0 : 1.0
Run Code Online (Sandbox Code Playgroud)

将以上内容保存到名为的文件中hsl-greenscreen.fx,并使用以下命令对图像执行它:

convert source.png -channel alpha -fx @hsl-greenscreen.fx out.png
Run Code Online (Sandbox Code Playgroud)

FX 脚本可能需要额外的调整才能匹配预期结果。您还会注意到,这需要一点 CPU 才能完成,但这可以改进。

另一种选择是-fuzz在每个 HSV 通道上应用相同的选项。只需分割和克隆每个通道,应用于-fuzz目标灰度,然后组成图像蒙版。

convert source.png -colorspace HSV -separate +channel \
  \( -clone 0 -background none -fuzz 5% +transparent grey32 \) \
  \( -clone 1 -background none -fuzz 10% -transparent grey50 \) \
  \( -clone 2 -background none -fuzz 20% -transparent grey60 \) \
  -delete 0,1,2 -alpha extract -compose Multiply -composite \
  -negate mask.png
Run Code Online (Sandbox Code Playgroud)

然后将蒙版指定为图像 Alpha 通道

convert source.png mask.png -alpha Off -compose CopyOpacity -composite out.png
Run Code Online (Sandbox Code Playgroud)

  • 您也可以通过一个命令来完成此操作。`转换 source.png \( source.png -colorspace HSB -separate +channel \( -clone 0 -background none -fuzz 5% +transparent grey32 \) \( -clone 0 -background none -fuzz 10% -transparent grey50 \ ) \( -clone 0 -background none -fuzz 15% -transparent grey60 \) -delete 0,1,2 -alpha extract -compose Multiply -composite -negate \) -compose CopyOpacity -composite out.png` (2认同)