是否有 SciPy 自动裁剪图像的方法,我。秒。 trim 来自 2d `numpy.ndarray` 的零点?
Is there a SciPy method to autocrop an image, i. e. trim zeros from a 2d `numpy.ndarray`?
1d numpy.ndarray
有 numpy.trim_zeros
。 numpy
或 scipy
中的哪种方法可以用于 trim 二维数组的零?
>>> import numpy as np
>>> a = np.array([[0, 0, 0, 0], [4, 1, 2, 0], [0, 3, 6, 0], [0, 0, 0, 0], [0, 0, 0, 0]])
>>> a
array([[0, 0, 0, 0],
[4, 1, 2, 0],
[0, 3, 6, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
我想得到的结果:
array([[4, 1, 2],
[0, 3, 6]])
您可以尝试使用一些 numpy
方法来理解列表:
>>> np.array([sub[~(sub == 0)].tolist() for sub in a if sub[sub != 0].tolist()])
array([[4, 1, 2], [3, 6]], dtype=object)
>>>
我会搜索最左边、最右边、最上面和最下面的非零值的位置,然后按照以下方式对该数组进行切片:
import numpy as np
a = np.array([[0, 0, 0, 0], [4, 1, 2, 0], [0, 3, 6, 0], [0, 0, 0, 0], [0, 0, 0, 0]])
nzero = np.nonzero(a)
top,bottom = np.min(nzero[0]),np.max(nzero[1])
left,right = np.min(nzero[1]),np.max(nzero[1])
out = a[top:bottom+1,left:right+1] # +1 as second argument is exclusive
print(out)
输出:
[[4 1 2]
[0 3 6]]
请注意,通过添加 nearest
和 farthest
,也可以很容易地将此方法应用于 3D 数组,它们分别是 np.min
和 np.max
of [=16] =]
1d numpy.ndarray
有 numpy.trim_zeros
。 numpy
或 scipy
中的哪种方法可以用于 trim 二维数组的零?
>>> import numpy as np
>>> a = np.array([[0, 0, 0, 0], [4, 1, 2, 0], [0, 3, 6, 0], [0, 0, 0, 0], [0, 0, 0, 0]])
>>> a
array([[0, 0, 0, 0],
[4, 1, 2, 0],
[0, 3, 6, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
我想得到的结果:
array([[4, 1, 2],
[0, 3, 6]])
您可以尝试使用一些 numpy
方法来理解列表:
>>> np.array([sub[~(sub == 0)].tolist() for sub in a if sub[sub != 0].tolist()])
array([[4, 1, 2], [3, 6]], dtype=object)
>>>
我会搜索最左边、最右边、最上面和最下面的非零值的位置,然后按照以下方式对该数组进行切片:
import numpy as np
a = np.array([[0, 0, 0, 0], [4, 1, 2, 0], [0, 3, 6, 0], [0, 0, 0, 0], [0, 0, 0, 0]])
nzero = np.nonzero(a)
top,bottom = np.min(nzero[0]),np.max(nzero[1])
left,right = np.min(nzero[1]),np.max(nzero[1])
out = a[top:bottom+1,left:right+1] # +1 as second argument is exclusive
print(out)
输出:
[[4 1 2]
[0 3 6]]
请注意,通过添加 nearest
和 farthest
,也可以很容易地将此方法应用于 3D 数组,它们分别是 np.min
和 np.max
of [=16] =]