【发布时间】:2019-06-10 02:11:24
【问题描述】:
我在这里遇到了一个奇怪的问题。 我从我的神经网络中取回了一个输出图像,它具有 dtype float32。我添加了一张从互联网上获取的背景图片,将其从 uint8 转换为 float32,然后将我的输出添加到背景图片之上。 现在,我想保存它,但 cv2.VideoWriter.write(blahblah) 只接受 uint8。我认为要将 float32 转换为 uint8,只需执行 * 255,但这可能是错误的,因为当我这样做时会遇到一些奇怪的眩光(我的照片可以在这里找到:OpenCV image shows weird glare after un-normalizing with * 255) ,可能是因为浮点经典错误或这种性质的事情。那么,如何安全地将 float32 转换为 uint8?或者,如何将 float32 写入文件?
说实话,我对一些事情感到很困惑。我知道 uint8 是 [0, 255] 而 float32 是 [0, 1],我知道 cv2.videowriter.write 接受 uint8,就是这样。附带说明一下,一个解决方案似乎是从一开始就将所有内容更改为 .astype(uint8) ,但我的神经网络吐出了一个 float32 ,所以我必须使用它。
【问题讨论】:
-
uint8 通常在 [0,255] 范围内(即使有人只想表示二进制图像)但是 float32 图像不会自动归一化为 [0,1](一个例子是在计算我们想要的梯度时也允许负数)。您检查过 float32 图像中的最小值和最大值吗?
标签: python opencv computer-vision