2010-11-04 114 views
0

编辑: 事实上,我需要一种方法可以读出的行,并提取所述像素信息到一些结构,所以我可以使用的putpixel函数基于所述ppm至创建的图像p3文件。导入PPM图像与Python和PIL模块

我一直在尝试这么久,我不能把它做对。

我正在使用Python Imaging Library(PIL),我想打开一个PPM图像并将其作为图像显示在屏幕上。

我该怎么做只使用PIL?

这是我的ppm图像。这只是我创建的7x1图片。

P3 
# size 7x1 
7 1 
255 
0 
0 
0 
201 
24 
24 
24 
201 
45 
24 
54 
201 
201 
24 
182 
24 
201 
178 
104 
59 
14 
+0

显示你已经尝试过将是一件好事什么。 – 2010-11-04 21:39:57

回答

0

编辑:当您修改您的问题,并且您只允许阅读这些行,请检查下面的链接。它解释了如何编写加载文件的包装器。我对这个测试自己,它应该工作...


您目前(11/2010)不能与PIL打开普通PPM图像。这里的平原意味着ascii。但是二进制版本可以工作。这样做的主要原因是ascii文件没有固定的每像素位数。这就是PIL中的图像加载器所呈现的。我有一个相关的问题在:

How to write PIL image filter for plain pgm format?

我打算写一个简单的PPM的一个PIL过滤器,但我的时间短。如果您有兴趣提供帮助,请告诉我。

BR,
尤哈

2

编辑:多一点信息很长的路要走。现在,当我看到您想要打开的图像以及确切的错误信息时,我记得关于PIL和PPM的一点点记录事实 - PIL不支持以P1/P2/P3开头的ASCII版本,只有二进制版本P4/P5/P6。附:您在文件中缺少一个字段,那么宽度和高度后面的最大像素值应该有255


PPM is listed作为受支持的格式,您应该能够使用 Image.open('myfile.ppm')打开文件。

需要更多信息才能显示图像。您使用的操作系统是什么,您是否喜欢使用您想使用的窗口功能?

+0

安装了python 2.6的Windows xp,python 2.6,pil。 – andrepcg 2010-11-07 12:49:51

+0

@Andrepcg,查看更新。 – 2010-11-07 15:44:17

+0

检查我的更新 – andrepcg 2010-11-09 00:22:23

1

阅读教程:http://effbot.org/imagingbook/introduction.htm

第一个示例

>>> import Image 
>>> im = Image.open("lena.ppm") 
>>> im.show() 
+0

值得注意的是,您可能会被show()方法捕获。如果你在Linux上,确保你已经安装了'xv'命令。 – Wesley 2010-11-04 21:47:11

+0

我以前试过,每次都会出错。 “提高IOError(”无法识别图像文件“) IOError:无法识别图像文件” – andrepcg 2010-11-07 12:48:52

1

im = Image.open("lena.ppm")

这似乎并不为P3 * .ppm格式的工作,它的工作原理,如果你尝试P6一。

2

,如果你喜欢用np.array对象的工作,只是这样做:

>>> from scipy.misc import imread 
>>> img = imread(path_to_ppm_file) 
>>> img.shape 
>>> (234, 555, 3)