Vic*_*Vic 10 python numpy crop
我正在尝试将一个 numpy 数组 [宽 x 高 x 颜色] 裁剪为预定义的较小尺寸。
我发现了一些应该做我想做的事情,但它只适用于 [width x height] 数组。我不知道如何使它适用于具有额外颜色维度的 numpy 数组。
Aja*_*iya 10
有了numpy您可以使用一系列指标。假设您有一个列表x[](单维),您可以对其进行索引,因为x[start:end]这称为切片。
切片也可以用于更高的维度
x[start1:end1, start2:end2, start3:end3]
Run Code Online (Sandbox Code Playgroud)
这可能就是您要寻找的。
尽管记住这不会生成新数组(即它不会复制)。对此的更改将反映到x.
感谢@coderforlife指出我之前记下的错误符号中的错误。
从您链接到的问题来看,这只是代码中的一个小变化:
def crop_center(img,cropx,cropy):
y,x,c = img.shape
startx = x//2 - cropx//2
starty = y//2 - cropy//2
return img[starty:starty+cropy, startx:startx+cropx, :]
Run Code Online (Sandbox Code Playgroud)
添加的只是:最后一行末尾的另一个,以及c形状解包的一个(未使用的)。
>>> img
array([[[ 18, 1, 17],
[ 1, 13, 3],
[ 2, 17, 2],
[ 5, 9, 3],
[ 0, 6, 0]],
[[ 1, 4, 11],
[ 7, 9, 24],
[ 5, 1, 5],
[ 7, 3, 0],
[116, 1, 55]],
[[ 1, 4, 0],
[ 1, 1, 3],
[ 2, 11, 4],
[ 20, 3, 33],
[ 2, 7, 10]],
[[ 3, 3, 6],
[ 47, 5, 3],
[ 4, 0, 10],
[ 2, 1, 35],
[ 6, 0, 1]],
[[ 2, 9, 0],
[ 17, 13, 4],
[ 3, 0, 1],
[ 16, 1, 3],
[ 19, 4, 0]],
[[ 8, 19, 3],
[ 9, 16, 7],
[ 0, 12, 2],
[ 4, 68, 10],
[ 4, 11, 1]],
[[ 0, 1, 14],
[ 0, 0, 4],
[ 13, 1, 4],
[ 11, 17, 5],
[ 7, 0, 0]]])
>>> crop_center(img,3,3)
array([[[ 1, 1, 3],
[ 2, 11, 4],
[20, 3, 33]],
[[47, 5, 3],
[ 4, 0, 10],
[ 2, 1, 35]],
[[17, 13, 4],
[ 3, 0, 1],
[16, 1, 3]]])
Run Code Online (Sandbox Code Playgroud)