как я мог изменить форму изображения, чтобы каждый блок 8x8 стал вектором с numpy / cv2 - PullRequest
1 голос
/ 26 марта 2020

Предположим, мое изображение 256x256x1. Мне нужно изменить форму каждого блока 8x8x1 в изображении на вектор, в результате чего получится тензор 32x32x64, в котором каждый из векторов 1x1x64 является измененной версией соответствующего блока 8x8. Как я могу сделать это с numpy или cv2?

1 Ответ

2 голосов
/ 26 марта 2020

Вы можете выполнить серию преобразований и транспозиций, чтобы получить желаемый результат. Например, начните с разделения существующих измерений, чтобы добавить больше:

a = a.reshape(32, 8, 32, 8)

Изменение формы не требует копирования данных. Теперь переместите измерения, которые вы хотите сгруппировать, обратно:

a = a.transpose(0, 2, 1, 3)

Это создаст копию массива с блоками, которые вы хотите расположить последовательно. Теперь вы можете изменить форму только блоков:

a = a.reshape(32, 32, 64)

Это изменение также не скопирует никаких данных, поскольку вы сохраняете макет памяти.

...