2

我正在使用 PyPNG 包来读取一个简单的 png 文件。
返回的像素数据是一个 itertools.imap 对象。
我如何读取这些数据。

import png, array  
reader = png.Reader(filename='image.png')  
w, h, pixels, metadata = reader.read()  

(877, 615, <itertools.imap object at 0x2a956a5b50>, {'bitdepth': 8, 'interlace': 0, 'planes': 3, 'greyscale': False, 'alpha': False, 'gamma': 0.45455, 'size': (877, 615)})

像素是这个 itertools.imap 对象,我假设它包含像素信息。

谢谢

问候

4

2 回答 2

4

itertools.imap返回一个可迭代的。您应该能够像迭代任何其他列表一样对其进行迭代。

当然,一个关键的区别是因为它是一个迭代器,所以你只能迭代它一次。你也不能索引到它

编辑(根据 OP 的要求):

如何遍历列表

假设您有一个名为 的列表LL如下所示:

L = ['a', 'b', 'c', 'd']

那么,位于 of 的元素L及其各自的索引为:

+-------+---------+
| index | element |
+-------+---------+
|   0   |   'a'   |
+-------+---------+
|   1   |   'b'   |
+-------+---------+
|   2   |   'c'   |
+-------+---------+
|   3   |   'd'   |
+-------+---------+

请注意,因为 python 有从零开始的索引,所以没有索引 4,即使L.

现在,如果你想要索引 3 in 的项目L,你会做L[3]. 如果你想要索引 2 中的项目L,你会这样做L[s],依此类推。

迭代一个L(假设你想打印出值):

for elem in L:
    print elem

其他方式:

for i in range(len(L)): # lookup range() and len()
    print L[i]

希望这可以帮助

于 2012-11-21T02:06:52.313 回答
1

最简单的(不一定对大图像有效)是使用内置list函数将迭代器转换为列表:

pixelsAsList = list(pixels)
print pixelsAsList[0] # the first row
print pixelsAsList[0][0] # The Red channel from the first pixel on the first row.
于 2013-04-05T08:50:30.920 回答