2017-06-22 67 views
1

我正在写这个代码获取图像的所有像素,然后将它们存储到列表中。将一个循环转换为一个列表理解

我的目标是将此循环转换为列表理解。

# Take the image 
im = Image.open("C:/Users/admin/Desktop/IMG_170619_114715_0007_NIR.tif") 
#load it 
pixels = im.load() 
# take the width and the height 
width, height = im.size 

然后是环......

all_pixels = [] 
for x in range(width): 
    for y in range(height): 
     cpixel = pixels[x,y] 
     all_pixels.append(cpixel) 

我第一次尝试是这样的......

all_pixels=[[pixels[x,y] for y in range(height)] for x in range(width)] 

而且它的工作,但是当我做LEN(all_pixels)看看我是否有所有的像素,我只有1280个值,这意味着计算没有正确完成在lsit理解...

len(all_pixels) Out[143]: 1280

我们应该有这样的事情..

len(all_pixels) Out[105]: 1228800

任何帮助吗?为什么列表理解不会计算循环的相同内容?

回答

2

嵌套的要来的家长一个后:

all_pixels = [pixels[x,y] for x in range(width) for y in range(height)] 

BTW,你不需要索引,你可以简单地使用嵌套的理解拼合图像您:

all_pixels = [x for row in pixels for x in row] 

图像是一个numpy数组,flatten是实现您的结果的另一种方式。它为'像素[X,Y]`,访问

all_pixels = pixels.flatten().to_list() 
+0

头脑不'像素[X] [Y]'... –

+0

@WillemVanOnsem我不认为这有什么差别。 –

+0

谢谢先生!这有助于.. –