我有一个代表 RGB 图像的 uint16 3-dim numpy 数组,该数组是从 TIF 图像创建的。问题是,当我在 QGIS 中导入原始图像时,例如显示正确,但如果我尝试在 python 中显示(使用 plt.imshow),结果会不同(在这种情况下更绿):
QGIS图像:

绘图图像:

我认为这在某种程度上与 matplotlib 管理 uint16 的方式有关,但即使我尝试除以 255 并转换为 uint8,我也无法获得好的结果。
根据您的评论,图像未使用 RGB 颜色空间进行编码,因为假设每个通道 8 位,R、G 和 B 通道的值范围为 [0-255]。
我不确定图像使用的是哪种色彩空间,但 TIFF 文件通常使用针对打印进行了优化的 CMYK。
可以尝试的其他常见色彩空间包括 YCbCr (YUV) 和 HSL,但是随着显示硬件和视频流技术的进步,这些年来已经创建了许多变体。
要将整个图像转换为 RGB 颜色空间,我建议使用opencv-pythonpip 包。该包有很好的文档记录,但作为一个示例,您可以将numpy数组img从 YUV 转换为 RGB:
img_bgr = cv.cvtColor(img, cv.COLOR_YUV2RGB)
使用时plt.imshow,colormap您可以使用参数,cmap="gray"例如尝试添加
plt.imshow(image, cmap="gray")
来源: https ://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.imshow.html
如果我尝试标准化图像,我会得到很好的结果:
对于每个通道: image[i,:,:] = image[i,:,:] / image[i,:,:].max()
但是,有些图像看起来比其他图像更暗: