在ImageMagick命令行中将RGB转换为灰度

在ImageMagick命令行中将RGB转换为灰度,imagemagick,grayscale,Imagemagick,Grayscale,如何使用(r+g+b)/3方法将RGB图像(3个通道)转换为灰度图像? 我浏览了一个示例页面: 但理想的方法是: convert test.png -fx '(r+g+b)/3' gray_fx_average.png 给了我一个错误的结果-结果图像仍然有3个通道 您可以通过运行命令来检查这一点:identify-format“%[colorspace]使用(r+g+b)/3方法将应用灰度效果,但图像将保留在sRGB中(这是此方法的预期行为)。您需要在使用-fx命令时指定所需的颜色 conve

如何使用(r+g+b)/3方法将RGB图像(3个通道)转换为灰度图像? 我浏览了一个示例页面: 但理想的方法是:

convert test.png -fx '(r+g+b)/3' gray_fx_average.png
给了我一个错误的结果-结果图像仍然有3个通道

您可以通过运行命令来检查这一点:
identify-format“%[colorspace]使用
(r+g+b)/3
方法将应用灰度效果,但图像将保留在sRGB中(这是此方法的预期行为)。您需要在使用
-fx
命令时指定所需的颜色

convert test.png -fx '(r+g+b)/3' -colorspace Gray gray_fx_average.png

使用
identify-format“%[colorspace]
convert-set colorspace Gray-separate-average
验证是否为我的任何图像提供了最佳结果。

要在shell中批量转换图像,请执行以下操作:


用于*.jpg中的文件;convert-颜色空间灰色$file$file;结束

我使用它对灰度图像(我从PNG转换)有很好的效果:

我将其用于扫描的黑白页面,将其转换为灰度图像(额外参数用于清除前几页的阴影):


在Imagemagick命令行中执行此操作的几种方法有:

convert test.png -grayscale average gray_average.png

or

convert test.png -colorspace OHTA -channel r -separate +channel gray_average.png

or

convert test.png -intensity average -colorspace gray gray_average.png

or

convert test.png -colorspace HSI -channel blue -separate +channel gray_average.png


看起来你是在利用红色通道来实现这一点,对吗 convert test.png-色彩空间OHTA-通道r-分离+通道灰度\u average.png
我更喜欢绿色频道(我听说这种方式在电视上很管用,也许是最好的)

我使用
转换
主要是将文档的彩色图片转换为灰度pdf文档,以便执行OCR。我的最佳效果是使用
Rec709Luminance
。所以我推荐

convert colourpicture.png -grayscale Rec709Luminance greyscalepicture.png

命令短,输出效果好。

谢谢egor7:)即使使用imagemagick 6.5.7,egor7命令也能正常工作,因为它在仅使用
convert-colorspace Gray
时会返回非常暗的图像。我在heroku(imagemagick 6.5.8)上使用rails+回形针,得到的图像非常暗,有很多不同的
convert
命令变体。这个很有效;)再次感谢。至少在新版ImageMagick中,它似乎是
-设置颜色空间…
应该是
-colorspace
。即使这样,我也需要提升亮度<代码>转换-亮度对比度5x0-设置颜色空间灰度-分离-平均值
给了我几乎相同的亮度。我建议不要使用此解决方案,即使它是投票最多的解决方案。我已经在我的代码中实现了它,它给我带来了多个奇怪的结果,最近一次,一个原本只包含白色背景上的黑色和品红文本的文档被制作成“2位灰度”图像(?),品红被转换成白色,因此无法识别。我找到的最好的解决方案是简单地
convert source.jpg-colorspace Gray destination.jpg
(请参见此处:)在结果和时间方面。mogrify是一个更紧凑的命令,用于转换一种类型的所有文件这里没有特定于Fish shell的内容;do convert-颜色空间灰色$file$file;使用
并行
可显著缩短转换时间并提高可读性:
并行转换-颜色空间灰色{}{}::*。jpg
我尝试了绿色和蓝色通道,即-channel G和
-channel B
,但只得到了一张灰色图片。对我来说只有
-频道R
起作用了。产生太深的灰色。@Sziebertham我想这是品味的问题。。)大概但是将此结果与其他灰度转换进行比较。注意:您也可以在父目录中比较hald CLUT。通常,目标是获得相同亮度或感知亮度的灰度。看看gimp和photoshop(psN)在这个意义上是如何执行的。最好的是那些有最多行难读文本的。@Szieberthdam感谢您的详细解释,尤其是测试图片。很高兴根据事实进行讨论!我仍然必须说,如果“目标是获得相同亮度或可感知亮度的灰度”,那么我完全同意你的看法:我在回答中提供的方法表现不佳。然而,这个问题并没有具体说明灰度转换的目标,你只是提出了一个可能的目标,因此,对于某些任务,我的答案甚至可以是最优的(!)。举个例子,对于灰度文本文档或书籍(正如我已经提到的)。同意。对于不同的目标,不同的转换效果最好。你提到你通常会对OCR进行灰度转换,我相信你对该目标转换的判断。我只是想说明,对于其他用途,如照片编辑等,可能值得使用GIMP 2.10或photoshop(不是最新版本)或在命令行中使用imagemagick和一个hald cluts进行转换。
ls ./*.png | xargs -L1 -I {} convert {} -strip -interlace JPEG -sampling-factor 4:2:0 -gaussian-blur 0.05 -colorspace Gray -quality 20 -density 300 -fill white -fuzz 40% +opaque "#000000" -density 300 {}.jpg 
convert test.png -grayscale average gray_average.png

or

convert test.png -colorspace OHTA -channel r -separate +channel gray_average.png

or

convert test.png -intensity average -colorspace gray gray_average.png

or

convert test.png -colorspace HSI -channel blue -separate +channel gray_average.png
convert colourpicture.png -grayscale Rec709Luminance greyscalepicture.png