我想將一個numpy數組[寬度x高度x顏色]裁剪爲預定義的較小尺寸。中心裁剪一個numpy數組
我發現了一些應該做我想要的東西,但它只適用於[寬x高]數組。我不知道如何使它適用於具有顏色的額外維度的numpy數組。
crop center portion of a numpy image
我想將一個numpy數組[寬度x高度x顏色]裁剪爲預定義的較小尺寸。中心裁剪一個numpy數組
我發現了一些應該做我想要的東西,但它只適用於[寬x高]數組。我不知道如何使它適用於具有顏色的額外維度的numpy數組。
crop center portion of a numpy image
隨着numpy
,您可以使用一系列指標。假設您有一個列表x[]
(單維),您可以將其索引爲x[start:end]
,這稱爲切片。
片可以用更高的維度中使用太像
x[start1:end1][start2:end2][start3:end3]
這可能是你在找什麼。
雖然記住這不會產生一個新的數組(即它不會複製)。對此的更改將反映到x
。
從您鏈接到的問題,它只是在代碼中的小變化:
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, :]
所有已添加了另一個:
到最後一行的末尾,和(未使用)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]]])
numpy的適用於任何尺寸
import numpy as np
X = np.random.normal(0.1, 1., [10,10,10])
X1 = X[2:5, 2:5, 2:5]
print(X1.shape)
最後打印語句導致[3,3,3]數組。