如何将Python OpenCV图像矩阵转换为4x4块列表
我有一个512 x 512条目的矩阵形式的图像。差不多如何将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
[[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是该块处理的顺序?