GeoTiff图像在numpy数组中被读取为全零

2024-10-01 07:33:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从landsat8 geotiff文件读取像素值和坐标,但在将文件作为数组读取后,它只显示geotiff文件的零。我使用以下代码读取文件:

from osgeo import gdal
gtif = gdal.Open( "FileName.TIF" )
band = gtif.GetRasterBand(1)
print(band.ReadAsArray())

““文件名.TIF是陆地卫星的波段图像之一。在

我还想遍历整个图像并获得坐标,所以请建议是否有任何简单的方法来遍历图像。 以下是我使用的图像链接:

^{pr2}$

Tags: 文件代码from图像importband像素数组
1条回答
网友
1楼 · 发布于 2024-10-01 07:33:40

你看图片的方式似乎还可以。但是,您不能仅通过打印来验证图像是否为全零。它只打印角点,因此您只能看到零,因为您的图像的所有角点都是零。在

可以使用numpy验证是否存在大于0的值。将您的代码更改为以下内容。请注意,现在它将打印39935,这是光栅的最大值(不是零)

from osgeo import gdal
import numpy as np
gtif = gdal.Open( "test.tif" )
band = gtif.GetRasterBand(1)
bandArray = band.ReadAsArray()
print(bandArray)
print(np.max(bandArray))

为了获得特定像素的坐标,可以使用与获取光栅右下角坐标相同的方法。在

^{pr2}$

在上面的代码中,ulx和{}是左上角的坐标。这可以直接从光栅中提取。xres和{}是每个像素的大小。鉴于此,右下角的坐标lrx和{}可以根据前面提到的值来计算。在

现在为了找到图像中任何像素的坐标,您只需将gtif.RasterXSize和{}替换为需要坐标的像素项。在

ulx, xres, xskew, uly, yskew, yres  = gtif.GetGeoTransform()
xCoord = ulx + (pixelX * xres)
yCoord = uly + (pixelY * yres)

所以为了找到每个像素的坐标,可以执行以下操作

ulx, xres, xskew, uly, yskew, yres  = gtif.GetGeoTransform()
for x in range(0, gtif.RasterXSize):
  for y in range(0, gtif.RasterYSize):
    xCoord = ulx + (x * xres)
    yCoord = uly + (y * yres)
    # now do something with the coordinate

相关问题 更多 >