微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在无符号dtypes中将负值强制为0?

如何解决如何在无符号dtypes中将负值强制为0?

我想从另一张图像(均为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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。