如何将Python OpenCV图像矩阵转换为4x4块列表

如何将Python OpenCV图像矩阵转换为4x4块列表,python,arrays,numpy,Python,Arrays,Numpy,我有一个512 x 512条目的矩阵形式的图像。差不多 [[12,234, . . ... . (512 entries)], [[12,234, . . ... . (512 entries)], [[12,234, . . ... . (512 entries)], . . [12,234, . . ... . (512 entries)]] 我想把图像分成4x4块,并把它们放在一个列表中。我该怎么做?将有128个大小为4 x 4的块,从左侧开始索引。OpenCV使用nu

我有一个512 x 512条目的矩阵形式的图像。差不多

[[12,234, . . ... .  (512 entries)],
 [[12,234, . . ... .  (512 entries)],
 [[12,234, . . ... .  (512 entries)],
 .
 .
 [12,234, . . ... .  (512 entries)]]

我想把图像分成4x4块,并把它们放在一个列表中。我该怎么做?将有128个大小为4 x 4的块,从左侧开始索引。

OpenCV
使用
numpy
numpy
允许您使用
image[0:4,0:4]等索引来获得正方形:

所以你需要类似的东西:

width, height = image.shape

# for image with ie. `RGB` color (3 bytes in every pixel)
#width, height, depth = image.shape 

blocks = []

for y in range(0, height, 4):
    for x in range(0, width, 4):
        blocks.append(image[y:y+4, x:x+4])

以下是我用于此目的的函数:

def blockshaped(arr, nrows, ncols):

   h, w = arr.shape
   return (arr.reshape(h//nrows, nrows, -1, ncols)
           .swapaxes(1,2)
           .reshape(-1, nrows, ncols))
其中: arr=您的输入2D np数组

WindowsSize=整数,表示平铺的大小


输出是一个形状数组(n,nrows,ncols),其中n*nrows*ncols=arr.size.

所以会有
128x128
块,对吗?你会怎么做?我想我会通过。
你只会和你最薄弱的环节一样好
图像[0:4,0:4]
等等
图像[a*4:a*4,b*4:b*4+4]
值错误:需要2个以上的值才能解包
谢谢你,因为你是真正的上帝,不像骗子@Divakar@Solly你说得对-我用
RGB
color对真实图像进行了测试。是的。你是老板。这是一个很好的解决方案。这是一段很长很长的路。Furas是一种短得多、长得多的代码,但速度快得多,因为没有for循环。如果需要处理大量图像,则不希望使用NumpyThats good info@cf2进行循环。您是否能够修改此代码以将结果存储为一对块?我的意思是,在最后一个列表中,您将值存储为元组,其中每个元组是(block,block_no),其中block_no是该块处理的顺序?