Распаковка списка кортежей пикселей - PullRequest
0 голосов
/ 29 декабря 2018

Я пытался решить этот вопрос из учебника некоторое время, но немного застрял.

Вопрос:

Мы предоставили модулю image процедуру

file2image(filename)

, который считывает изображение, сохраненное в файле в формате .png.Импортируйте эту процедуру и вызовите ее, указав в качестве аргумента имя файла, содержащего изображение в этом формате, присваивая возвращаемое значение переменной 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)] ... и т. д.]

Так что мой код явно неверный, но я попытался

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

1 Ответ

0 голосов
/ 29 декабря 2018

это довольно ужасный текст описания для описания цели, вот мой взгляд на понимание списка списков и списка списков списков

>>> [[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 циклах выбрасываетпеременная выходит из итератора, так как мне не нужно ее хранить

...