我正在使用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对象,我假设它包含像素信息。
由于
此致
答案 0 :(得分:4)
itertools.imap
返回一个可迭代的。您应该可以迭代它,就像迭代任何其他列表一样。
当然,一个关键的区别是,因为它是一个迭代器,所以你只能迭代它一次。你也无法索引它
编辑(根据OP的要求):
假设您有一个名为L
的列表,L
如下所示:
L = ['a', 'b', 'c', 'd']
然后,L
的元素及其各自的索引是:
+-------+---------+
| index | element |
+-------+---------+
| 0 | 'a' |
+-------+---------+
| 1 | 'b' |
+-------+---------+
| 2 | 'c' |
+-------+---------+
| 3 | 'd' |
+-------+---------+
请注意,因为python具有从零开始的索引,所以没有索引4,即使L
中有四个项目。
现在,如果您希望L
中的索引为3的项目,则执行L[3]
。如果您希望L
中的索引为2的项目,则执行L[s]
,依此类推。
迭代L
(假设您要打印出值):
for elem in L:
print elem
另一种方式:
for i in range(len(L)): # lookup range() and len()
print L[i]
希望这有帮助
答案 1 :(得分: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.