python讀取與寫入tif圖片的完整信息(過程詳解)
python讀取與寫入tif圖片的完整信息
一、導(dǎo)入gdal包
在anconda環(huán)境下:
conda install gdal
在其他環(huán)境下,去這個網(wǎng)站下載gdal包,直接使用pip install gdal是不行的

注意:
對于liunx用戶,建議使用conda安裝,對于win用戶兩者都可以。
使用方式一:from osgeo import gdal
使用方式二: import gdal
讀取if
#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]是像元高度 負值 相減
# 如果影像是指北的,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
#Tif文件寫入
def WriteTifImg(filename, im_proj, im_geotrans, im_data, datatype=None):
'''功能:用于寫TIF格式的遙感圖像,同時兼容一個通道 和 三個通道
返回值:im_proj : 地圖投影信息,保持與輸入圖像相同
im_geotrans : 仿射矩陣,計算當前圖像塊的仿射信息
im_data:通道順序位 [channel,height,width], 當前圖像塊的像素矩陣,
datatype:指定當前圖像數(shù)據(jù)的數(shù)據(jù)類型,默認和輸入的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ù)類型必須有,因為要計算需要多大內(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補充:用python讀取tif格式圖像,opencv讀取
import cv2
img = cv2.imread("11.tif",1)
#第二個參數(shù)是通道數(shù)和位深的參數(shù),
#IMREAD_UNCHANGED = -1#不進行轉(zhuǎn)化,比如保存為了16位的圖片,讀取出來仍然為16位。
#IMREAD_GRAYSCALE = 0#進行轉(zhuǎn)化為灰度圖,比如保存為了16位的圖片,讀取出來為8位,類型為CV_8UC1。
#IMREAD_COLOR = 1#進行轉(zhuǎn)化為RGB三通道圖像,圖像深度轉(zhuǎn)為8位
#IMREAD_ANYDEPTH = 2#保持圖像深度不變,進行轉(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圖片的完整信息的文章就介紹到這了,更多相關(guān)python讀取與寫入tif內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python udp如何實現(xiàn)同時收發(fā)信息
這篇文章主要介紹了python udp如何實現(xiàn)同時收發(fā)信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
基于python實現(xiàn)matlab filter函數(shù)過程詳解
這篇文章主要介紹了基于python實現(xiàn)matlab filter函數(shù)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
python實現(xiàn)猜數(shù)字游戲(無重復(fù)數(shù)字)示例分享
這篇文章主要介紹了python實現(xiàn)猜數(shù)字游戲(無重復(fù)數(shù)字)示例,需要的朋友可以參考下2014-03-03
Python使用numpy產(chǎn)生正態(tài)分布隨機數(shù)的向量或矩陣操作示例
這篇文章主要介紹了Python使用numpy產(chǎn)生正態(tài)分布隨機數(shù)的向量或矩陣操作,簡單描述了正態(tài)分布的概念并結(jié)合實例形式分析了Python使用numpy模塊結(jié)合matplotlib繪制正態(tài)分布曲線圖相關(guān)操作技巧,需要的朋友可以參考下2018-08-08
Python結(jié)合OCR實現(xiàn)從掃描件PDF中提取文本
掃描件 PDF 本質(zhì)是 “圖像集合”,無法直接復(fù)制或編輯文本,要提取其中的內(nèi)容,需借助OCR,下面我們就來看看如何通過 Python 結(jié)合 OCR 技術(shù)實現(xiàn)從掃描件 PDF 中提取文本吧2025-10-10
Python?dateutil庫簡化日期時間處理利器使用場景實踐
在Python中,處理日期和時間是常見的任務(wù)之一,dateutil庫是Python標準庫中datetime模塊的擴展,提供了許多方便的工具和函數(shù),簡化了日期和時間的操作2023-12-12

