使用GDAL Python读取.TIF图像变得太暗

时间:2018-06-18 06:44:26

标签: python numpy matplotlib image-processing gdal

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

此外,似乎2D阵列中的某些强度值超过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()

我是图像处理的初学者,所以任何细节都会非常感激。

1 个答案:

答案 0 :(得分:1)

检查var conventionPack = new ConventionPack { new IgnoreIdFieldConvention() }; ConventionRegistry.Register("Do not deserialize _id field", conventionPack, t => t.Namespace == "Some.Name.Space"); // via namespace ConventionRegistry.Register("Do not deserialize _id field", conventionPack, t => t != typeof(SyncData<>)); // white-list approach ConventionRegistry.Register("Do not deserialize _id field", conventionPack, t => typeof(IDisposable).IsAssignableFrom(t)); // via an interface public class IgnoreIdFieldConvention : ConventionBase { public void Apply(BsonMemberMap memberMap) { memberMap.ClassMap.UnmapProperty("Id"); } } 的dtype您可能会看到这不是uint8格式。可能是uint16或者是float16 / 32。因此,值可能远大于255.您可以使用

将阵列强制转换为uint8

image_DN

如果您想将其重新调整为0-255整数范围,则应将图像转换为8位。您可以使用nump.interp手动使用numpy手动执行此操作

image_DN = image_DN.astype(uint8)

然后选择image_DN = np.interp(image_DN, (minval, maxval), (0, 255)).astype(np.uint8)minval这是有道理的问题。

GDAL也可以通过这样的maxval为您解决此问题

gdal.Translate