使用ImageMagick的绿屏色度键

时间:2012-08-05 16:50:32

标签: imagemagick chromakey

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

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

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

如果还有其他更好的色度键算法,您的建议也会受到高度赞赏。

提前致谢。

1 个答案:

答案 0 :(得分:4)

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

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

将上述内容保存到名为hsl-greenscreen.fx的文件中,并使用以下符号对其执行:

convert source.png -channel alpha -fx @hsl-greenscreen.fx out.png

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

另一种选择是应用相同的-fuzz选项,但是在每个HSV频道上。简单分裂&amp;克隆每个频道,对目标灰色应用-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

然后将遮罩指定为图像alpha通道

convert source.png mask.png -alpha Off -compose CopyOpacity -composite out.png