解压缩像素元组列表

时间:2018-12-29 19:37:25

标签: python tuples list-comprehension

一段时间以来,我一直在尝试解决这本教科书的问题,但是有点卡住了。

问题:

  

我们为模块image提供了过程

file2image(filename)
     

读取存储在文件中的图像   .png格式。导入此过程并调用它,   提供包含此格式图像的文件名作为参数,并指定返回的值   变量data

的值      

data的值是一个列表列表,data[y][x]是像素(x,y)的强度。像素点   (0,0)在图像的左下角,像素(width-1, height-1)在图像的右上角。   像素的强度是介于0(黑色)和255(白色)之间的数字。   使用一种理解将复数集pts分配给列表x+yi,以便   像素(x, y)的图像强度小于120。

这是提供的相关方法

def file2image(path):
    """ Reads an image into a list of lists of pixel values (tuples with
        three values). This is a color image. """
    (w, h, p, m) = png.Reader(filename = path).asRGBA() # force RGB and alpha
    return [_flat2boxed(r) for r in p]

我真的不确定如何将这3个值解析为一个理解,有人猜测吗?

我理解数据结构的方式如下:[[((x,y,z)],[(x,y,z)] ... etc]

所以我的代码显然是错误的,但是我尝试了

    data = img.file2image("img01.png")
    data = img.color2gray(data)
    pts = [(x,y,z) for (x,y,z) in data]
    plot(pts)

1 个答案:

答案 0 :(得分:0)

这是描述目标的非常糟糕的描述文字,这是我对列表列表和列表列表的理解

>>> [[v for v in range(5)] for _ in range(5)]
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> [[[v for v in range(5)] for _ in range(5)] for _ in range(5)]
[[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]]
>>>

_循环中的for丢弃了迭代器中的变量,因为我不需要存储它