python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...
(1)利用python GDAL庫讀寫geotiff格式的遙感影像方法,具有很好的參考價值,不錯!
from osgeo import gdal
import numpy as np
def read_tiff(inpath):
ds=gdal.Open(inpath)
row=ds.RasterXSize
col=ds.RasterYSize
band=ds.RasterCount
geoTransform=ds.GetTransform()
proj=ds.GetTransform()
data=np.zeros([row,col,band])
for i in range(band):
dt=ds.GetRasterBand(1)
data[:,:,i]=dt.ReadAsArray(0,0,col,row)
return data,geoTransform,proj
def array2raster(outpath,array,geoTransform,proj):
cols=array.shape[1]
rows=array.shape[0]
driver=gdal.GetDriverByName('Gtiff')
outRaster=driver.Create(newRasterfn,cols,rows,1,gdal.GDT_Byte)
outRaster.SetGeoTransform(geoTransform)#參數(shù)2,6為水平垂直分辨率,參數(shù)3,5表示圖片是指北的
outband=outRaster.GetRasterBand(1)
outband.WriteArray(array)
outRaster.SetProjection(proj)#將幾何對象的數(shù)據(jù)導出為wkt格式
outRaster.FlushCache()
if __name__=="_main_":
data,geoTransform,proj=read_tiff('d:/a.tif')
array2raster("d:/b.tif",np.zeros[2400,2400],geoTransform,proj)
(2)具體細節(jié)參數(shù)
#1*************波段組成圖像,波段指揮顏色************
import gdal ?#導入庫
dataset=gdal.open("filename") ?#文件名,如*.tif
dir(dataset) ????#可通過dir()來顯示信息,或者某個函數(shù)的用法or ?print(dataset)
#基本函數(shù)
dataset.GetDescription() ??#獲得柵格的描述信息
dataset.RasterCount ???????#獲得柵格數(shù)據(jù)集的波段數(shù)
band=dataset.GetRasterBand(1) ?#獲得柵格數(shù)據(jù)集的波段
width=dataset.RasterXSize ?#讀取圖像的寬度,x方向上的像素個數(shù)
height=dataset.RasterYSize ?#讀取圖像的高度,y方向上的像素個數(shù)
#讀取二進制
dataset.ReadRaster(xoff,yoff,xsize,ysize,buf_xsize=None,buf_ysize=None,buf_type=None,band_list=None)
#xoff,yoff指定想要讀取的部分原點位置在整張圖像中距離全圖原點的位置
#xsize和ysize指定要讀取部分圖像的矩形大小
#buf_xsize,buf_ysize代表縮放大小,buf_type可設置讀取的數(shù)據(jù)類型
#讀取數(shù)組
dateset.ReadAsArray(xoff,yoff,xsize,ysize)
#舉個例dataset.ReadRaster(230,270,10,10)#把圖像中位于230,270,寬度為10高度為10的數(shù)據(jù)讀取出來了
band.XSize
band.YSize ?#波段圖像的寬和高
band.DataType ?#圖像中實際數(shù)值的數(shù)據(jù)類型,具體的數(shù)據(jù)類型定義在gdalconst模塊里,需import gdalconst
band.GetNoDataValue() #獲取無意義值
band.GetMaximum()
band.GetMininum() ?#由于是文件格式?jīng)]有固有的最值,所以不會顯示出來,用下面這個函數(shù)
band.ComputeRasterMinMax()#能算出排除了無意義值后的最值
band.GetRasterColorInterpretation()
gdalconst.GCI_PaletteIndex
colormap=band.GetRasterColorTable() #獲得顏色表
colormap.GetCount() ??#獲得顏色的數(shù)量
colormap.GetPaletteInterpretation() #知道獲得的顏色表是什么顏色表,比如是RGB顏色表
#比如GPI_GRAY,GPI_RGB,GPI_CYMP,GPI_HLS
gdal.GPI_RGB
for i in range(colormap.GetCount()):
print(colormap.GetColorEntry(i)) ?#獲得顏色表中的值,有四個值,其中前三個有意義
#2**************細節(jié)**************
band.ReadAsArray(xoff,yoff,win_xsize,win_ysize,buf_xsize,buf_ysize)
#xoff,yoff是取值窗口的左上角在實際數(shù)據(jù)中所處象元的xy位置。
#win_xsize,win_ysize是取值窗口覆蓋的區(qū)域大小
#buf_xsize,buf_ysize是取值窗口取出數(shù)組進行縮放后數(shù)組的大小,縮的時候是取周圍點的平均值,如果不設置,則跟3、4參數(shù)一致
#例子1:橫向讀取和縱向讀取的效率
import gdal
import time
dataset=gdal.Open("filename")
band=dataset.GetRasterBand(1)
width=dataset.RasterXSize
height=dataset.RasterYSize
bw=128
bh=128
bxsize=width/128
bysize=height/128
start=time.time()
band.ReadAsArray(0,0,width,height)
print(time.time()-start)
start2=time.time()
for i in range(bysize):
for j in range(bxsize):
band.ReadAsArray(bw*j,bh*i,bw,bh)
print(time.time()-start2)
#調換循環(huán)順序
for j in range(bxsize):
for i in range(bysize):
band.ReadAsArray(bw*j,bh*i,bw,bh)
【參考】
點滴分享,福澤你我!Add?oil!
轉載本文請聯(lián)系原作者獲取授權,同時請注明本文來自張偉科學網(wǎng)博客。
鏈接地址:http://blog.sciencenet.cn/blog-3428464-1250704.html
上一篇:Python代碼調試錯誤集合(1)
下一篇:查詢Anaconda安裝路徑、安裝包位置及授予訪問權限
總結
以上是生活随笔為你收集整理的python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批量修改数据_#泰Q头条#065期 四步
- 下一篇: python函数变量的作用域_学不会的P