我怎样才能重塑图像,让每个 8x8 块成为具有 numpy/cv2 的矢量

how could I reshape an image to let each 8x8 block become a vector with numpy/cv2

假设我的图像是 256x256x1。我需要将图像中的每个 8x8x1 块重塑为一个向量,这将产生一个 32x32x64 张量,其中每个 1x1x64 向量都是相应 8x8 块的重塑版本。我怎么能用 numpy 或 cv2 做到这一点?

您可以执行一系列整形和转置以获得您想要的结果。例如,首先拆分现有维度以添加更多维度:

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

整形不需要复制数据。现在将要分组的维度移到后面:

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

这会创建一个数组的副本,其中包含您想要连续排列的块。现在你可以只重塑方块了:

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

此重塑也不会复制任何数据,因为您保留了内存布局。