我正在使用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)})pixels是这个itertools.imap对象,我假设它包含像素信息。
谢谢
问候
发布于 2012-11-21 10:06:52
itertools.imap返回一个可迭代的。您应该能够像迭代任何其他列表一样对其进行迭代。
当然,一个关键的区别是,因为它是迭代器,所以您只能遍历它一次。您也无法对其进行索引
编辑(根据OP的请求):
如何遍历列表
假设您有一个名为L的列表,L如下所示:
L = ['a', 'b', 'c', 'd']然后,L的元素at和它们各自的索引是:
+-------+---------+
| index | element |
+-------+---------+
| 0 | 'a' |
+-------+---------+
| 1 | 'b' |
+-------+---------+
| 2 | 'c' |
+-------+---------+
| 3 | 'd' |
+-------+---------+注意,因为python有从零开始的索引,所以没有索引4,即使L中有4个条目。
现在,如果您想要在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]希望这能有所帮助
发布于 2013-04-05 16:50:31
最简单的(对于大图像不一定有效)是使用内置的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.https://stackoverflow.com/questions/13485243
复制相似问题