我知道这个问题很简单,但我没有找到绕过这个问题的方法:
我正在处理图像,输出像素是float32,值在范围[-1; 1]
。问题是,当使用openCV保存时,所有的负数据和浮点值都会丢失(我只得到值为0或1的图像)
所以我需要把这些图像转换成[0; 255]
(Int8)
我试过了
img * 255
,但这样做对负值没有帮助。(img + 1) * 255
,我去掉了负值,但是我正在创建
溢油
有(干净的)方法吗?
我用的是Python35,OpenCV2和Numpy,但我认为这更多的是一个数学问题而不是一个库的东西
Tags:
正如您所发现的,
img * 255
给您一个[-255:255]
的结果范围,而(img + 1) * 255
给您一个[0:510]
的结果。你在正确的轨道上。你需要的是:
int((img + 1) * 255 / 2)
或round((img + 1) * 255 / 2)
。这将输入从[-1:1]
移到[0:2]
,然后乘以127.5
得到[0.0:255.0]
。使用
int()
实际上会导致[0:254]
您可以使用
cv2.normalize()
考虑以下数组
a
:norm_image
返回以下数组:在本例中:
-1
将映射到0
1
将被mpped到255
注意事项:
float
alpha
和beta
中。如果您只需要将范围-1,1映射到范围0,255,您可以简单地比较这些范围:
有关正确的映射,请参见this question
相关问题 更多 >
编程相关推荐