如何在无符号数据类型中将负值强制为 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)