#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, и поэтому он мне нужен. Большое вам спасибо.