您好,登錄后才能下訂單哦!
這篇文章主要介紹“python怎么讀取與寫入tif圖片的完整信息”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“python怎么讀取與寫入tif圖片的完整信息”文章能幫助大家解決問題。
在anconda環(huán)境下:
conda install gdal
在其他環(huán)境下,去這個網(wǎng)站下載gdal包,直接使用pip install gdal是不行的
注意:
對于liunx用戶,建議使用conda安裝,對于win用戶兩者都可以。
使用方式一:from osgeo import gdal
使用方式二: import gdal
#Tif文件讀取 def ReadTifImg(filename): '''功能:用于讀取TIF格式的遙感圖像, 返回值:im_proj : 地圖投影信息,一般在剪裁,拼合圖像的時候不修改這部分信息 im_geotrans : 仿射矩陣,里面存放了地圖絕對的地理信息位置 im_data:通道順序位 [channel,width,height]''' dataset = gdal.Open(filename) # 打開文件 im_width = dataset.RasterXSize # 柵格矩陣的列數(shù) im_height = dataset.RasterYSize # 柵格矩陣的行數(shù) im_geotrans = dataset.GetGeoTransform() # 仿射矩陣 im_proj = dataset.GetProjection() # 地圖投影信息 # GeoTransform[0] 橫向 水平 [0,0.5,0,0,0,-0.5] # GeoTransform[3] 左上角位置 # GeoTransform[1]是像元寬度 正值 相加 # GeoTransform[5]是像元高度 負(fù)值 相減 # 如果影像是指北的,GeoTransform[2]和GeoTransform[4]這兩個參數(shù)的值為0。 im_data = dataset.ReadAsArray(0, 0, im_width, im_height) # 將數(shù)據(jù)寫成數(shù)組,對應(yīng)柵格矩陣 del dataset return im_proj, im_geotrans, im_data
#Tif文件寫入 def WriteTifImg(filename, im_proj, im_geotrans, im_data, datatype=None): '''功能:用于寫TIF格式的遙感圖像,同時兼容一個通道 和 三個通道 返回值:im_proj : 地圖投影信息,保持與輸入圖像相同 im_geotrans : 仿射矩陣,計算當(dāng)前圖像塊的仿射信息 im_data:通道順序位 [channel,height,width], 當(dāng)前圖像塊的像素矩陣, datatype:指定當(dāng)前圖像數(shù)據(jù)的數(shù)據(jù)類型,默認(rèn)和輸入的im_data類型相同''' # gdal數(shù)據(jù)類型包括 # gdal.GDT_Byte, # gdal .GDT_UInt16, gdal.GDT_Int16, gdal.GDT_UInt32, gdal.GDT_Int32, # gdal.GDT_Float32, gdal.GDT_Float64 # 判斷柵格數(shù)據(jù)的數(shù)據(jù)類型 if datatype is None: # im_data.dtype.name數(shù)據(jù)格式 if 'int8' in im_data.dtype.name: datatype = gdal.GDT_Byte elif 'int16' in im_data.dtype.name: datatype = gdal.GDT_UInt16 else: datatype = gdal.GDT_Float32 # 判讀數(shù)組維數(shù) if len(im_data.shape) == 3: im_bands, im_height, im_width = im_data.shape else: im_bands, (im_height, im_width) = 1, im_data.shape # 創(chuàng)建文件 driver = gdal.GetDriverByName("GTiff") # 數(shù)據(jù)類型必須有,因?yàn)橐嬎阈枰啻髢?nèi)存空間 dataset = driver.Create(filename, im_width, im_height, im_bands, datatype) dataset.SetGeoTransform(im_geotrans) # 寫入仿射變換參數(shù) dataset.SetProjection(im_proj) # 寫入投影 if im_bands == 1: dataset.GetRasterBand(1).WriteArray(im_data) # 寫入數(shù)組數(shù)據(jù) else: for i in range(im_bands): # 按波段寫入 dataset.GetRasterBand(i + 1).WriteArray(im_data[i]) del dataset
import cv2 img = cv2.imread("11.tif",1) #第二個參數(shù)是通道數(shù)和位深的參數(shù), #IMREAD_UNCHANGED = -1#不進(jìn)行轉(zhuǎn)化,比如保存為了16位的圖片,讀取出來仍然為16位。 #IMREAD_GRAYSCALE = 0#進(jìn)行轉(zhuǎn)化為灰度圖,比如保存為了16位的圖片,讀取出來為8位,類型為CV_8UC1。 #IMREAD_COLOR = 1#進(jìn)行轉(zhuǎn)化為RGB三通道圖像,圖像深度轉(zhuǎn)為8位 #IMREAD_ANYDEPTH = 2#保持圖像深度不變,進(jìn)行轉(zhuǎn)化為灰度圖。 #IMREAD_ANYCOLOR = 4#若圖像通道數(shù)小于等于3,則保持原通道數(shù)不變;若通道數(shù)大于3則只取取前三個通道。圖像深度轉(zhuǎn)為8位 print (img) print (img.shape) print (img.dtype) print (img.min()) print (img.max()) #創(chuàng)建窗口并顯示圖像 cv2.namedWindow("Image") cv2.imshow("Image",img) cv2.waitKey(0) #釋放窗口 cv2.destroyAllWindows()
關(guān)于“python怎么讀取與寫入tif圖片的完整信息”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。