gpt4 book ai didi

python - 将 16 位 Tiff 图像转换为 8 位 RGB

转载 作者:行者123 更新时间:2023-11-30 21:55:26 27 4
gpt4 key购买 nike

我正在处理一些由 16 位 .tiff 图像组成的卫星图像。颜色编码为每 channel 16 位。我想知道如何将这些图像转换为正常的 8 位 RGB 以进行进一步的 CNN 处理。

我尝试过 OpenCV (cv2.read('file',-1)) 和 PIL (read('file')),但这两个包不能识别并读取16位tiff图像。

最佳答案

通常,当您想在 Python 中读取或写入任何位深度和​​格式的图像时,最好使用 ImageIO 。顾名思义,它的唯一目标是输入/输出图像。唯一需要注意的是:它可能会忽略图像的元数据。也就是说:它可能无法正确处理定义标准 sRGB 以外的颜色空间的图像。 ,否则可能无法保留图像的预期方向。

您将在图像中读取example.tif,如下所示:

import imageio
image = imageio.imread('example.tif')

至于转换,这只是基本数学。您将在其中接收像素数据的数据结构是 NumPy大批。内省(introspection) image.shapeimage.dtype。您应该期望图像的形状(y, x, 3),其中y是垂直方向的像素数, x 表示水平方向,3 表示三个颜色 channel :红、绿、蓝。其dtype(数据类型)应为uint16,表示无符号16位整数。

旁注:由于有三个颜色 channel ,每个 channel 都以 16 位分辨率进行采样,因此图像的颜色深度通常被描述为“48 位”(每像素)。

16 位整数的范围为 0 到 65535 (= 216−1)。它们需要强制为 8 位范围:0 到 255 (= 28−1)。因此除以 256 (= 28):

image = image / 256

这将产生一个浮点像素值数组。其数据类型必须显式转换为 8 位整数才能删除任何小数。

image = image.astype('uint8')

同样,更有效的是,您还可以 bit-shift 16 位值右移 8 位:

image = (image >> 8).astype('uint8')

这使得转换速度更快(在现代硬件上大约是 2 倍左右),因为它跳过了浮点运算。

然后,使用最终的image数组进行进一步处理,或者将其保存到新文件中:

imageio.imwrite('example.png', image)

关于python - 将 16 位 Tiff 图像转换为 8 位 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56760139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com