python讀取與寫入tif圖片的完整信息(過(guò)程詳解)
python讀取與寫入tif圖片的完整信息
一、導(dǎo)入gdal包
在anconda環(huán)境下:
conda install gdal
在其他環(huán)境下,去這個(gè)網(wǎng)站下載gdal包,直接使用pip install gdal是不行的
注意:
對(duì)于liunx用戶,建議使用conda安裝,對(duì)于win用戶兩者都可以。
使用方式一:from osgeo import gdal
使用方式二: import gdal
讀取if
#Tif文件讀取 def ReadTifImg(filename): '''功能:用于讀取TIF格式的遙感圖像, 返回值:im_proj : 地圖投影信息,一般在剪裁,拼合圖像的時(shí)候不修改這部分信息 im_geotrans : 仿射矩陣,里面存放了地圖絕對(duì)的地理信息位置 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]這兩個(gè)參數(shù)的值為0。 im_data = dataset.ReadAsArray(0, 0, im_width, im_height) # 將數(shù)據(jù)寫成數(shù)組,對(duì)應(yīng)柵格矩陣 del dataset return im_proj, im_geotrans, im_data
寫入tif
#Tif文件寫入 def WriteTifImg(filename, im_proj, im_geotrans, im_data, datatype=None): '''功能:用于寫TIF格式的遙感圖像,同時(shí)兼容一個(gè)通道 和 三個(gè)通道 返回值:im_proj : 地圖投影信息,保持與輸入圖像相同 im_geotrans : 仿射矩陣,計(jì)算當(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)橐?jì)算需要多大內(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
補(bǔ)充:用python讀取tif格式圖像,opencv讀取
import cv2 img = cv2.imread("11.tif",1) #第二個(gè)參數(shù)是通道數(shù)和位深的參數(shù), #IMREAD_UNCHANGED = -1#不進(jìn)行轉(zhuǎn)化,比如保存為了16位的圖片,讀取出來(lái)仍然為16位。 #IMREAD_GRAYSCALE = 0#進(jìn)行轉(zhuǎn)化為灰度圖,比如保存為了16位的圖片,讀取出來(lái)為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則只取取前三個(gè)通道。圖像深度轉(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圖片的完整信息的文章就介紹到這了,更多相關(guān)python讀取與寫入tif內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實(shí)現(xiàn)讀取mat、tif和hdr格式數(shù)據(jù)
- Python讀取TIF影像的多種方法
- Python讀取hdf文件并轉(zhuǎn)化為tiff格式輸出
- 利用Python裁切tiff圖像且讀取tiff,shp文件的實(shí)例
- python讀取tif圖片時(shí)保留其16bit的編碼格式實(shí)例
- Python模塊_PyLibTiff讀取tif文件的實(shí)例
- 對(duì)Python3+gdal 讀取tiff格式數(shù)據(jù)的實(shí)例講解
- 淺談python下tiff圖像的讀取和保存方法
- Python讀取TIF文件的兩種方法實(shí)現(xiàn)
相關(guān)文章
keras中的loss、optimizer、metrics用法
這篇文章主要介紹了keras中的loss、optimizer、metrics用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06用Python實(shí)現(xiàn)數(shù)據(jù)的透視表的方法
今天小編就為大家分享一篇用Python實(shí)現(xiàn)數(shù)據(jù)的透視表的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Windows下Anaconda的安裝和簡(jiǎn)單使用方法
這篇文章主要介紹了Windows下Anaconda的安裝和簡(jiǎn)單使用方法,需要的朋友可以參考下2018-01-01Python隨機(jī)生成均勻分布在三角形內(nèi)或者任意多邊形內(nèi)的點(diǎn)
這篇文章主要為大家詳細(xì)介紹了Python隨機(jī)生成均勻分布在三角形內(nèi)或者任意多邊形內(nèi)的點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Python中asyncore異步模塊的用法及實(shí)現(xiàn)httpclient的實(shí)例
asyncore即是一個(gè)異步的socket封裝,特別是dispatcher類中包含了很多異步調(diào)用的socket操作方法,非常犀利,下面我們就來(lái)講解Python中asyncore異步模塊的用法及實(shí)現(xiàn)httpclient的實(shí)例2016-06-06面向新手解析python Beautiful Soup基本用法
這篇文章主要介紹了面向新手解析python Beautiful Soup基本用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07Python 使用SFTP和FTP實(shí)現(xiàn)對(duì)服務(wù)器的文件下載功能
這篇文章主要介紹了Python 使用SFTP和FTP實(shí)現(xiàn)對(duì)服務(wù)器的文件下載功能,本文通過(guò)實(shí)例代碼給大家介紹的非常想詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12對(duì)python中使用requests模塊參數(shù)編碼的不同處理方法
今天小編就為大家分享一篇對(duì)python中使用requests模塊參數(shù)編碼的不同處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Python提取轉(zhuǎn)移文件夾內(nèi)所有.jpg文件并查看每一幀的方法
今天小編就為大家分享一篇Python提取轉(zhuǎn)移文件夾內(nèi)所有.jpg文件并查看每一幀的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06