问题描述
我想从另一张图像(均为uint8
dtype中减去一张图像,但是如果此操作导致负数,则它应返回uint8
dtype的最大值(即:255)
如何强制它返回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,1,2],dtype=uint8)
否则会产生:
img1-img2
# array([255,dtype=uint8)