Python 中图像表示为 numpy
数组 numpy.ndarray
,处理图像的时候想挑出特殊数值,可以用 np.where
实现,格式如下:
np.where(condition[, x, y]),会将满足条件的设为 x
,不满足的设为 y
,当然也可以设置 x,y
,此时该函数相当于 np.asarray(condition).nonzero()
。如果是1维数组,则相当于:
[xv if c else yv for c, xv, yv in zip(condition, x, y)]
示例:
1D:
a = np.arange(10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.where(a < 5, a, 10*a)
# array([ 0, 1, 2, 3, 4, 50, 60, 70, 80, 90])
2D:
# x, y 维度与 condition 相同
np.where([[True, False], [True, True]], [[1, 2], [3, 4]], [[9, 8], [7, 6]])
# array([[1, 8], [3, 4]])
# x, y 维度与 condition 不同
a = np.array([[0, 1, 2], [0, 2, 4], [0, 3, 6]])
np.where(a < 4, a, -1) # -1 将广播(broadcast)
# array([[0, 1, 2], [0, 2, -1], [0, 3, -1]])