如何在Python中使用GDAL打开geotiff图像?

4

我正在尝试运行以下代码:

from osgeo import gdal
import sys

# This allows GDAL to throw Python exceptions
src_ds = gdal.Open("fused.tif")
src_ds.show()

但是我收到了以下错误:
Traceback (most recent call last):
    File ".../gdalopen1.py", line 5, in module src_ds.show()
AttributeError: 'Dataset' object has no attribute 'show'

为什么会发生这种情况?

似乎这个对象不存在“show”命令。在这个页面上,他们打开一个*.tif图像,然后使用print gtif.GetMetadata()命令。这对你有用吗? - JonasVautherin
2
你期望.show()方法做什么?绘制光栅图?为什么?你在哪里看到这个方法的文档?.Open方法已经成功打开了光栅图。现在你想用它做什么? - Spacedman
我们需要在Python中读取图像并显示融合的地理TIFF图像。您可以解释如何将图像读入数组中吗? - kalemula aditya
3个回答

10
以下代码打开一个栅格文件,并将栅格的一条带读入到NumPy数组中。
from osgeo import gdal
ds = gdal.Open('input.tif', gdal.GA_ReadOnly)
rb = ds.GetRasterBand(1)
img_array = rb.ReadAsArray()

@kalemulaaditya dsNoneType,因为文件没有正确打开。最有可能的原因是传递给 gdal.Open 的文件名不正确或需要提供绝对路径。 - Logan Byers

8
您已经打开数据集,就像Spacedman在这里回答的那样。GDAL不是一个可视化库(它的核心功能不包括可视化)。
您可以使用以下方法读取数据:
data = src_ds.ReadAsArray()

然后将其传递给您喜爱的绘图库。

或者,您可以直接输出到更常见的“图片”格式(例如PNG),并使用任何您喜欢的查看器显示结果。

vmin = 0 # minimum value in your data (will be black in the output)
vmax = 1 # minimum value in your data (will be white in the output)
ds = gdal.Translate('fused.png', 'fused.tif', format='PNG', outputType=gdal.GDT_Byte, scaleParams=[[vmin,vmax]])
ds = None

缩放是必要的,将您的数据值转换为8位范围(0-255),这是图片通常使用的范围。


错误信息如下:“模块编译时使用的API版本为9,但当前numpy版本为7”。 - kalemula aditya

3
您可以按照以下步骤进行操作。
from osgeo import gdal
gdal.UseExceptions()
ds = gdal.Open('Your Geotif image')
band = ds.getRasterBand(1)

需要解释一下。例如,什么是想法/要点?请通过编辑(更改)您的答案进行回复,而不是在此处进行评论(不带“编辑:”,“更新:”或类似内容 - 答案应该看起来像今天写的)。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接