7

我正在尝试在 python 中使用 GDAL 创建一个 .tif 文件。它正在创建一个文件,但每当我浏览它时都会说“没有可用的预览”。现在,我只是想让它复制输入文件。这是我的代码:

gdal.AllRegister()

inDs = gdal.Open("C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\color_a2.tif")
if inDs is None:
  print 'Could not open image file'
  sys.exit(1)
else:
    print "successfully opened input file"

rows = inDs.RasterYSize
cols = inDs.RasterXSize
myband = inDs.GetRasterBand(1)
elev_data = myband.ReadAsArray(0,0,cols,rows)
driver = inDs.GetDriver()
outDs = driver.Create('C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\new.tif', cols, rows, 1, GDT_Int32)

if outDs is None:
    print "couldn't open output file"
    sys.exit(1)

outBand = outDs.GetRasterBand(1)
outData = numpy.zeros((rows,cols),numpy.int16)
outBand.WriteArray(elev_data)
outBand.FlushCache()
outBand.SetNoDataValue(-99)
outDs.SetGeoTransform(inDs.GetGeoTransform())
outDs.SetProjection(inDs.GetProjection())
del outData

=============================更新===================== ==================== 取得了一些发现...我研究了使用统计归一化从一种数字格式转换为另一种数字格式的方法。我处理了输入数据并使用以下算法将其转换为 uint8:

std = elev_data.std() #standard dev
avg = elev_data.mean()
arr = numpy.zeros((rows,cols),numpy.uint8)
for _i_ in _range_(_rows_):
    for _j_ in _range_(_cols_):
        arr[i,j] = (((out_elev[i,j]-avg)/std)*127)+128 #normalization formula
        #this puts all vals in range 1 to 255 (uint8)
dr = gdal.GetDriverByName("GTiff")
outDs = dr.Create("name",cols,rows,3,GDT_Byte) 
#creates and RGB file, accepts uint8 for input
outDs.GetRasterBand(1).WriteArray(arr) #write the output as shades of red
#this writes out a format viewable by microsoft products

我想复制的主要原因是为了证明我可以读入,然后根据计算写出更新的数据。

什么可能是我可以使用色带而不是仅一种颜色的阴影来写出输出数据的方法?

4

2 回答 2

2

您的意思是在尝试将 TIFF 文件预览为图像时,您从 Windows 图片和传真查看器应用程序中得到“没有可用的预览”?(见下面的截图。)

没有可用的预览截图

请记住,TIFF 有许多不同的风格,并且并非都相同。特别是,Windows 图片和传真查看器不支持所有类型的 TIFF。

有一篇 Microsoft 知识库文章您无法使用 Windows 图片和传真查看器查看 TIFF 图像,其中部分内容是:

Windows XP 中的 Windows 图片和传真查看器使用 Windows 图形设备接口 (GDI+)。GDI+ 支持许多标准的传真压缩算法。但是,它可能与一些不常用的编码方案不兼容。

如果您正在寻找查看栅格数据(包括 GeoTIFF 栅格)的工具,我建议您免费提供OpenEV,您可以将其作为FWTools包的一部分获得。

于 2011-07-15T18:12:31.703 回答
1

我注意到几件事:

  1. 您只复制源数据集的一个波段。如果是彩色图像,它可能有 3 个波段,或者是一个彩色图。如果它有彩色图,您也需要将其复制过来。如果是 3 或 4 个波段,则必须复制所有数据。
  2. CreateCopy()是一种更简单的方法来做你正在寻找的东西。
于 2011-07-29T19:55:11.190 回答