[Python] Use GDAL to store the complex image in the standard ENVI format

Official GDAL documentation

1. Custom function

data type:datatype = gdal.GDT_CFloat32
file type:driver = gdal.GetDriverByName("ENVI")

def readTiff(inputfile):
    dataset = gdal.Open(inputfile)
    if dataset == None:
        print(inputfile+" can't open !!!")      
    width = dataset.RasterXSize 
    height = dataset.RasterYSize 
    bands = dataset.RasterCount 
    data = dataset.ReadAsArray(0,0,width,height)
    geotrans = dataset.GetGeoTransform()
    proj = dataset.GetProjection()
    return data, geotrans, proj

def writeTiffEnvi(data,geotrans,proj,path):
    if 'int8' in data.dtype.name:
        datatype = gdal.GDT_Byte
    elif 'float16' in data.dtype.name:
        datatype = gdal.GDT_Float32
    elif 'complex64' in data.dtype.name:
        datatype = gdal.GDT_CFloat32
    else:
        datatype = gdal.GDT_Float32
    if len(data.shape) == 3:
        bands, height, width = data.shape
    elif len(data.shape) == 2:
        data = np.array([data])
        bands, height, width = data.shape
    
    driver = gdal.GetDriverByName("ENVI")
    dataset = driver.Create(path, int(width), int(height), int(bands), datatype)
    if(dataset!= None):
        dataset.SetGeoTransform(geotrans) 
        dataset.SetProjection(proj) 
    for i in range(bands):
        dataset.GetRasterBand(i+1).WriteArray(data[i])
    del dataset

2. Output results

  • Envi image and its main file
  • Envi Open Effect
  • Profile information

Leave a Comment