如何仅使用ImageMagick命令行保留红色
我有以下图像: 我想要的是只保留红色并去饱和 将其他颜色转换为灰度。因此: 如何使用Imagemagick命令行执行此操作 我试过了,但失败了:如何仅使用ImageMagick命令行保留红色,imagemagick,image-manipulation,Imagemagick,Image Manipulation,我有以下图像: 我想要的是只保留红色并去饱和 将其他颜色转换为灰度。因此: 如何使用Imagemagick命令行执行此操作 我试过了,但失败了: convert original.png \( -clone 0 -transparent red -alpha extract -transparent black \) redonly.png 这里有一种使用ImageMagick的方法,尽管并不完美。我为红色指定色调=0度,公差=25度,两者都在0到360范围内 输入: 也不是完美的,
convert original.png \( -clone 0 -transparent red -alpha extract -transparent black \) redonly.png
这里有一种使用ImageMagick的方法,尽管并不完美。我为红色指定色调=0度,公差=25度,两者都在0到360范围内 输入:
也不是完美的,但相当容易理解。基本上,您可以使用检查每个像素的色调,并根据其色调/颜色返回原始像素或其灰度等效值 因此,作为第一个尝试,您可以这样做,以将所有显示高色调值的像素替换为其灰度(亮度)等效值:
magick ripe.jpg -fx "(u.hue<0.1)? u : u.lightness" result.jpg
因此,我正在测试每个像素的条件,如果为真,我返回valueA
,如果为假,我返回valueB
。当我参考u
和u.hue
和u.lightness
时,u
表示我命令中的第一个图像-我可以加载两个图像并使用第一个图像的特征选择第二个图像的特征,然后我将使用u
和v
进行区分。最后,这些值在[0,1]范围内进行缩放,因此我不测试“范围[0360]内的色调>350”,而是测试色调>0.9
作为粗略的等效值-我想我可以使用色调>(350/360)
。请注意,您可以使表达式任意复杂,也可以将其放在单独的文件中,以便像这样重复使用:
magick ripe.jpg -fx @DeSatNonRed.fx result.jpg
hueMin=350/360;
hueMax=20/360;
(hue>hueMin) || (hue<hueMax) ? u : u.lightness
DeSatNonRed.fx
可能看起来像这样:
magick ripe.jpg -fx @DeSatNonRed.fx result.jpg
hueMin=350/360;
hueMax=20/360;
(hue>hueMin) || (hue<hueMax) ? u : u.lightness
hueMin=350/360;
hueMax=20/360;
(hue>hueMin)| |(hue@Mark
我的代码基本上做了相同的事情。solarize,然后offset,然后threshold做了与你的fx表达式相同的事情,但以度为单位。我没有给出太多解释,所以感谢你以简单的方式做了这件事。
hueMin=350/360;
hueMax=20/360;
(hue>hueMin) || (hue<hueMax) ? u : u.lightness