Возникли проблемы с переписыванием кода для понимания списка для поворота изображения в Python

#python #opencv #numpy #list-comprehension

#python #opencv #numpy #понимание списка

Вопрос:

Итак, после того, как я не нашел свою проблему здесь, в stackoverflow, которая заключается в том, как переписать цикл for для понимания списка, куда вставляются значения, я должен спросить, возможно ли переписать этот код:

 rotate = np.zeros((w,h,c), np.uint8) # create an empty image filled with zeros turned 90°

for y in xrange(h):
    for x in xrange(w):
        rotate[x][y] = img[y][x]
  

для понимания списка? Я думал, что что-то подобное сработает, но это не сработало:

 rotate[x][y] = img[y][x] for y in range(h) for x in range(w) 
  

после этого я просто играл с различными комбинациями добавления индексов и скобок, и я всегда получал некоторые синтаксические ошибки. Просто для записи, я знаю, что в opencv и в numpy есть функции для поворота изображений, мне просто интересно переписать цикл for для понимания списка.

Ответ №1:

 rotate = np.array([[img[y][x] for y in xrange(h)] for x in xrange(w)])
  

Комментарии:

1. это работает, но почему вы должны использовать np.array()? Есть ли способ без этого?

2. @dima list comprehensions возвращает списки, поэтому вам придется преобразовать этот список в массив numpy.

3. Если вам не нужен массив numpy, вы можете просто назначить результирующий список непосредственно rotate .

4. нет, я проверил, что cv2.imraed() возвращает массив numpy, и поэтому он мне нужен. Большое вам спасибо.