我在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()
我是图像处理的初学者,所以任何细节都会非常感激。
答案 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.您可以使用
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