我一直在寻找使用 ImageMagick 的绿屏色度键的良好算法,但到目前为止还没有令人满意的答案。
我想探索一种简单的方法,使用沿 HSV/HSB 颜色空间的范围选择(类似于 -fuzz)来选择我想要的绿色并使它们透明。-fuzz 似乎只适用于 RGB 空间,这是不希望的。
谁能教我如何为 H、S、V 分量选择不同范围的颜色,例如 115-125 度色调、40%-60% 饱和度和 30-80% 值。
如果还有其他更好的色度键算法,您的建议也将受到高度赞赏。
提前致谢。
我一直在寻找使用 ImageMagick 的绿屏色度键的良好算法,但到目前为止还没有令人满意的答案。
我想探索一种简单的方法,使用沿 HSV/HSB 颜色空间的范围选择(类似于 -fuzz)来选择我想要的绿色并使它们透明。-fuzz 似乎只适用于 RGB 空间,这是不希望的。
谁能教我如何为 H、S、V 分量选择不同范围的颜色,例如 115-125 度色调、40%-60% 饱和度和 30-80% 值。
如果还有其他更好的色度键算法,您的建议也将受到高度赞赏。
提前致谢。
Imagemagick 的FX可用于生成 Alpha 通道。, hue
, saturation
, lightness
&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
将上述内容保存到一个名为的文件中hsl-greenscreen.fx
,并使用以下命令对图像执行它:
convert source.png -channel alpha -fx @hsl-greenscreen.fx out.png
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
然后将遮罩指定为图像的 alpha 通道
convert source.png mask.png -alpha Off -compose CopyOpacity -composite out.png