如何在无符号数据类型中将负值强制为 0?
How to force negative values to 0 in unsigned dtypes?
我想从另一个图像中减去一个图像(都是 uint8
dtype)但是如果这个操作导致负数,它应该 return uint8
dtype 的最大值(即:255)
如何将其强制为 return 0?
注意:如果可能的话,我不想变换 int8
中的图像然后 np.clip
中的图像。
import numpy as np
img1 = np.zeros(1, dtype = np.uint8)
img2 = np.ones(1, dtype = np.uint8)
img = img1 - img2
print(img1)
print(img2)
print(img)
由于您使用的是 uint8
,因此所有数字都在 [0,255]
范围内。在这种情况下,负数 1
会导致 255
,-2
会导致 254
等等。如果转换为带符号的 dtype 不是一个选项,您可以使用 np.where
根据条件进行减法,例如:
img1 = np.arange(4, dtype=np.uint8)
img2 = np.ones(4, dtype=np.uint8)
np.where(img1>img2, img1-img2, 0)
# array([0, 0, 1, 2], dtype=uint8)
否则会产生:
img1-img2
# array([255, 0, 1, 2], dtype=uint8)
我想从另一个图像中减去一个图像(都是 uint8
dtype)但是如果这个操作导致负数,它应该 return uint8
dtype 的最大值(即:255)
如何将其强制为 return 0?
注意:如果可能的话,我不想变换 int8
中的图像然后 np.clip
中的图像。
import numpy as np
img1 = np.zeros(1, dtype = np.uint8)
img2 = np.ones(1, dtype = np.uint8)
img = img1 - img2
print(img1)
print(img2)
print(img)
由于您使用的是 uint8
,因此所有数字都在 [0,255]
范围内。在这种情况下,负数 1
会导致 255
,-2
会导致 254
等等。如果转换为带符号的 dtype 不是一个选项,您可以使用 np.where
根据条件进行减法,例如:
img1 = np.arange(4, dtype=np.uint8)
img2 = np.ones(4, dtype=np.uint8)
np.where(img1>img2, img1-img2, 0)
# array([0, 0, 1, 2], dtype=uint8)
否则会产生:
img1-img2
# array([255, 0, 1, 2], dtype=uint8)