我正在编写此代码,该代码获取图像的所有像素,然后将它们存储到列表中。
我的目标是将此循环转换为列表理解。
# 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
请帮忙吗?为什么列表理解不能计算与循环相同的东西???
答案 0 :(得分:2)
嵌套的应该在父元素之后:
all_pixels = [pixels[x,y] for x in range(width) for y in range(height)]
顺便说一下,你不需要索引,你可以简单地使用嵌套的理解来压扁你的形象:
all_pixels = [x for row in pixels for x in row]
图像是一个numpy数组,flatten
是另一种实现结果的方法。
all_pixels = pixels.flatten().to_list()