在 Python 中将 .pgm 转换为 .png

问题:
我想从几个文件夹中导入所有“.pgm”文件并将它们存储为“.png”。

为此,我使用以下代码行:

from glob import glob

files=glob('yaleB*/*.pgm')
print 'number of files is',len(files)
count=0
for f in files:
    new_f=f[:-3]+'png'
    !convert $f $new_f
    count += 1
    if count % 100==0:
        print count,f,new_f

不幸的是,我总是收到这个错误: "command not found: convert"

有一个简单的解决方法吗?
我的假设是,这是一个“旧”命令(我从中获取此代码的 Jupyter Notebook 来自 2014 年......)

stack overflow Converting .pgm to .png in Python
原文答案

答案:

作者头像

感叹号 ( ! ) 表示它是一个外部命令, convertImageMagick 包的一部分。

所以你需要安装 ImageMagick 才能工作。请注意,如果您安装 v7 或更新版本,命令将变为:

!magick INPUT.PGM OUTPUT.PNG

但是,如果您想将当前目录中的所有 PGM 文件转换为 PNG 文件,您甚至不需要循环,您可以一次性完成:

magick mogrify -format png *.pgm

还有更多警告......从 Python 的角度来看,没有真正需要将 PGM 文件转换为 PNG,因为 OpenCVPIL/Pillowwandscikit-image 无论如何都可以读取 PGM 文件。 GIMPfeheogPhotoshop 也可以。

作者头像

你可以尝试使用操作系统和枕头

import os
from PIL import Image

for file in os.listdir():
    filename, extension  = os.path.splitext(file)
    if extension == ".pgm":
        new_file = "{}.png".format(filename)
        with Image.open(file) as im:
            im.save(new_file)