如何将RGB图像转换为单通道灰度图像,并使用python保存?

时间:2019-01-11 05:18:24

标签: image opencv image-processing

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

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

无论如何,有什么不错的方法吗? 对于1通道图像格式的建议也将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果您有几十个图像,将它们全部转换为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位图像(彩色或灰度),并带有或不带有后续应用程序可能无法处理的调色板(取决于颜色的数量)。