Python uint16 np.array显示为图像时的问题

Python uint16 np.array显示为图像时的问题,python,image,numpy,Python,Image,Numpy,我有一个uint16 3维numpy阵列,显示RGB图像,该阵列是从TIF图像创建的。 问题是,例如,当我在QGIS中导入原始图像时,图像显示正确,但如果我尝试在python中显示(使用plt.imshow),结果会有所不同(在本例中为绿色): QGIS图像: 打印图像: 我认为它与matplotlib管理uint16的方式有某种联系,但即使我尝试除以255并转换为uint8,我也无法获得好的结果。使用plt.imshow时,您可以使用colormap参数,例如,尝试添加cmap=“gray

我有一个uint16 3维numpy阵列,显示RGB图像,该阵列是从TIF图像创建的。 问题是,例如,当我在QGIS中导入原始图像时,图像显示正确,但如果我尝试在python中显示(使用plt.imshow),结果会有所不同(在本例中为绿色):

QGIS图像:

打印图像:


我认为它与matplotlib管理uint16的方式有某种联系,但即使我尝试除以255并转换为uint8,我也无法获得好的结果。

使用
plt.imshow
时,您可以使用
colormap
参数,例如,尝试添加
cmap=“gray”

plt.imshow(image, cmap="gray")
资料来源:

根据您的评论,图像没有使用RGB颜色空间进行编码,因为R、G和B通道的值范围为[0-255],假设每个通道8位

我不确定图像使用的是哪种颜色空间,但TIFF文件通常使用CMYK,这是为打印而优化的

其他尝试使用的常见色彩空间包括YCbCr(YUV)和HSL,但随着显示硬件和视频流技术的发展,这些颜色空间有很多变化

要将整个图像转换为RGB颜色空间,我建议使用
opencv python
pip包。该软件包有很好的文档记录,但作为一个示例,下面是如何将
numpy
array
img
从YUV转换为RGB:

img_bgr = cv.cvtColor(img, cv.COLOR_YUV2RGB)

如果我尝试标准化图像,我会得到很好的结果:

对于每个频道: image[i,:,:]=image[i,:,:]/image[i,:,:]max()

但是,有些图像看起来比其他图像暗:


实际上,我看到在QGIS中,不同的通道RGB的范围不同,R=[0235],G=[0363],B=[0263]你试过用R除以235,G除以363,等等吗。?仍然得到太绿的输出?你除以256,技术上不是255。如果我将图像除以65535(因为它们被编码为uint16),我会得到非常小的像素值,所以它们几乎完全是黑色的