【问题标题】:Reading .TIF image using GDAL Python becomes too dark使用 GDAL Python 读取 .TIF 图像变得太暗
【发布时间】:2018-11-26 23:19:55
【问题描述】:

我正在使用 Python 中的 GDAL 读取 .TIF 图像,但是当我重新绘制图像时,它比原始图像暗得多。

此外,二维数组中的某些强度值似乎超过 255。代码如下:

import gdal
import numpy as np
import matplotlib.pyplot as plt

tf = "pic.TIF"
img = gdal.Open(tf)
image_DN = np.zeros((img.RasterYSize, img.RasterXSize, img.RasterCount))

for band in range(img.RasterCount):
    imgband = img.GetRasterBand(band + 1)
    image_DN[:, :, band] = imgband.ReadAsArray()

# an array with the max value in each channel
maxes = np.zeros(img.RasterCount)
for i in range(img.RasterCount):
    maxes[i] = np.amax(image_DN[:, :, i])

img_RGB_DN = np.rollaxis(np.asarray([1 / maxes[0] * image_DN[:, :, 0], \
                                     1 / maxes[1] * image_DN[:, :, 1], \
                                     1 / maxes[2] * image_DN[:, :, 2]]), 0, 3)

plt.figure(1)
plt.imshow(img_RGB_DN)
plt.title('original DN')
plt.show()

我是图像处理的初学者,所以任何细节将不胜感激。

【问题讨论】:

    标签: python numpy matplotlib image-processing gdal


    【解决方案1】:

    检查image_DN 的dtype 您可能会发现这不是uint8 格式。可能是 uint16 或 float16/32。因此,这些值可以远大于 255。您可以通过使用将数组强制转换为 uint8

    image_DN = image_DN.astype(uint8)

    如果您想将其重新缩放到 0-255 整数范围,您应该将图像转换为 8 位。您可以像这样使用 numpy 使用 np.interp 手动执行此操作

    image_DN = np.interp(image_DN, (minval, maxval), (0, 255)).astype(np.uint8)

    那么这是一个选择minvalmaxval的问题,这是有道理的。

    GDAL 也可以像这样用gdal.Translate 为你解决这个问题

    img = gdal.Translate('',
                   'pic.TIF',
                   options='-ot Byte -scale minval maxval -of MEM')
    

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 2021-05-29
      • 1970-01-01
      • 2014-10-11
      • 2021-09-02
      • 2011-10-17
      • 2021-02-10
      • 2020-03-13
      • 1970-01-01
      相关资源
      最近更新 更多