如何select所有灰度颜色?
How to select all grayscale colors?
在 ImageMagick 转换中,我可以 select 特定颜色,例如-opaque blue
。我怎样才能 select 所有灰度颜色(例如 #000000、#707070、#ffffff)?
不确定您要做什么,但这可能会有所帮助。灰度像素的饱和度为零,因此这可能是识别它们的最简单方法。
首先,制作一个时髦的示例图像:
convert -size 400x100 gradient:black-white -bordercolor red -border 80 image.png
现在使所有灰色区域(饱和度很低的区域)透明:
convert image.png -alpha on -channel A -fx "saturation<0.01?0:1" result.png
备注
请注意,-fx
运算符非常强大,但速度非常慢,因为它实际上是对每个像素进行插值。如果你的图片很大,下面的技巧可能更合适。
基本上,我克隆图像并将整个图像转换为 HSL
色彩空间并分离通道。然后我放弃了色相和亮度通道,这样我就只剩下饱和度了。然后我将其设置为阈值并将其作为 alpha 通道复制回原始图像。在 2000x2000 像素的图像上,此方法将 运行 不到一秒,而 -fx
方法将需要 5-6 秒。
convert image.png \( +clone -colorspace hsl -separate -delete 0,2 -threshold 1% \) -compose copy-opacity -composite result.png
在 ImageMagick 转换中,我可以 select 特定颜色,例如-opaque blue
。我怎样才能 select 所有灰度颜色(例如 #000000、#707070、#ffffff)?
不确定您要做什么,但这可能会有所帮助。灰度像素的饱和度为零,因此这可能是识别它们的最简单方法。
首先,制作一个时髦的示例图像:
convert -size 400x100 gradient:black-white -bordercolor red -border 80 image.png
现在使所有灰色区域(饱和度很低的区域)透明:
convert image.png -alpha on -channel A -fx "saturation<0.01?0:1" result.png
备注
请注意,-fx
运算符非常强大,但速度非常慢,因为它实际上是对每个像素进行插值。如果你的图片很大,下面的技巧可能更合适。
基本上,我克隆图像并将整个图像转换为 HSL
色彩空间并分离通道。然后我放弃了色相和亮度通道,这样我就只剩下饱和度了。然后我将其设置为阈值并将其作为 alpha 通道复制回原始图像。在 2000x2000 像素的图像上,此方法将 运行 不到一秒,而 -fx
方法将需要 5-6 秒。
convert image.png \( +clone -colorspace hsl -separate -delete 0,2 -threshold 1% \) -compose copy-opacity -composite result.png