Python GDAL光栅输出

Python GDAL光栅输出,python,io,arcgis,raster,gdal,Python,Io,Arcgis,Raster,Gdal,我试图在python中使用GDAL创建一个.tif文件。它正在创建一个文件,但每当我浏览时都会说“没有可用的预览”。现在,我只是想让它复制输入文件。这是我的密码: ========================================更新========================================= 有了一些发现。。。 我研究了使用统计标准化从一种数字格式转换为另一种数字格式的方法。我使用以下算法处理输入数据并将其转换为uint8: 我想复制的主要原因是为了证明

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

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

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


使用颜色渐变(而不是仅使用一种颜色的阴影)写入输出数据的方法是什么?

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

记住,有,但不是所有的都是一样的。特别是,Windows图片和传真查看器不支持所有类型的TIFF

有一篇Microsoft知识库文章的部分内容是:

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


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

我注意到以下几点:

  • 只能复制源数据集的一个标注栏。如果它是一种颜色 图像,它可能有3个波段,或一个颜色贴图。如果它有一个彩色地图, 你也需要把它复制过来。如果是3个或4个波段,则有 复制所有数据
  • CreateCopy()
    是一种更简单的方法来完成您想要的任务

  • 我解决了我的问题——我没有一个适合我创建的输出文件类型的查看器。microsoft产品不支持查看Int16。我下载并安装了Brava Reader,它可以查看我能生成的大多数形式的输出。

    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
    
    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