Numpy 将图像格式从32FC1转换为16UC1

Numpy 将图像格式从32FC1转换为16UC1,numpy,opencv,scikit-image,Numpy,Opencv,Scikit Image,我需要将图像编码为16UC1格式,但收到错误: cv_bridge.core.CvBridgeError:编码指定为16UC1,但映像具有不兼容的类型32FC1 我尝试使用skimage函数img\u作为uint,但由于我的图像值不在-1和1之间,因此无法工作。我还试图通过将所有值除以从np.amax获得的值来“规范化”我的值,但使用skimage函数只返回一个空白图像 有没有办法实现这种转变 这是numpy的原始版本,您应该能够: import numpy as np img = np.ran

我需要将图像编码为16UC1格式,但收到错误: cv_bridge.core.CvBridgeError:编码指定为16UC1,但映像具有不兼容的类型32FC1

我尝试使用skimage函数
img\u作为uint
,但由于我的图像值不在-1和1之间,因此无法工作。我还试图通过将所有值除以从
np.amax
获得的值来“规范化”我的值,但使用skimage函数只返回一个空白图像

有没有办法实现这种转变


这是numpy的原始版本,您应该能够:

import numpy as np
img = np.random.normal(0, 1, (300, 300, 3)).astype(np.float32) # simulated image
uimg = img.astype(np.uint16)
如果不在无符号范围内,您可能首先需要进行某种规格化。可能是这样的:

img_normalized = (img-img.min())/(img.max()-img.min())*256**2
但是您的正常化策略将取决于您想要完成的任务


谢谢分享图片。我可以想象如下:

import numpy as np
import matplotlib.pyplot as plt

arr = np.load('32FC1_image.npz')
img = arr['arr_0']
img = np.squeeze(img) # this gets rid of the extra dimensions that are causing matplotlib to not recognize it as an image, the extra dimensions also may be causing your problems
img_normalized = (img-img.min())/(img.max()-img.min())*256**2
img_normalized = img_normalized.astype(np.uint16)
plt.imshow(img_normalized)

尝试使用标准化的16位图像。

请提供一些代码,以便我们能够诊断您的问题:)使用
cv_桥时,这样做会返回一个黑色图像。
这并不奇怪,它可能与标准化有关,可能意味着应用的颜色贴图会抛出一个较大的值。你能提供一个例子吗?您可以使用
np.savez('myfile.npz',myimg)
保存原始的
32FC1
,然后上载。我有.npz文件,但我不知道如何上载。您可以尝试此服务并共享链接:我添加了链接