首页 > 解决方案 > 如何将 RGB 图像转换为单通道灰度图像,并使用 python 保存?

问题描述

问题很简单。我有很多 3 通道 RGB 图像。(它们的颜色已经是灰色的,但你知道,RGB 格式。)我想要将它们转换为具有 1 通道的灰度图像。

我尝试使用opencv来做到这一点。但是在我用png格式保存后,它就毁了。我认为png文件的结构是原因......

无论如何,有什么好的方法可以做到这一点吗?对 1 通道图像格式的推荐也将不胜感激。

标签: imageopencvimage-processing

解决方案


如果您有几十个图像,将它们全部转换为 OpenCV 可以读取的单通道灰度图像的快速方法是使用终端中的ImageMagick - 它包含在大多数 Linux 发行版中,可用于 macOS 和 Windows。因此,要制作当前目录中所有 PNG 的单通道 8 位PGM版本:

magick mogrify -format PGM -colorspace gray -depth 8 *.png

如果你有成百上千的图像,也可以使用GNU Parallel来让你的所有 CPU 内核并行运行:

parallel -X magick mogrify -format PGM -colorspace gray -depth 8 ::: *.png

但是,我不建议您这样做,因为您需要考虑许多其他事情:

  • 如果您的图像包含重要的元数据,您需要选择保留它的格式,而不是 PGM

  • 如果您的图像包含浮点像素数据,您可能应该使用 TIFF 格式

  • 如果您的目的是节省磁盘空间(在这个几乎免费存储的时代,这似乎很愚蠢),您应该考虑使用可压缩格式

  • 如果您的目的是节省 RAM,则可能根本不需要这样做,因为您可以在加载时将图像转换为单通道,例如OpenCV imread(...cv2.IMREAD_GRAYSCALE)

因此,您需要更清楚地了解您的数据和目的。另请注意,许多人声称要节省“内存”,他们可能指的是磁盘或 RAM。

还请记住,PNG 可以保存 8 位或 16 位图像、彩色或灰度图像,以及带有或不带有调色板(取决于颜色的数量),后续应用程序可能无法处理。


推荐阅读