python讀取與寫入tif圖片的完整信息(過程詳解)
更新時間:2023年05月01日 08:54:06 作者:兩只蠟筆的小新
這篇文章主要介紹了python讀取與寫入tif圖片的完整信息,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
python讀取與寫入tif圖片的完整信息
一、導入gdal包
在anconda環(huán)境下:
conda install gdal
在其他環(huán)境下,去這個網站下載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 # 柵格矩陣的列數
im_height = dataset.RasterYSize # 柵格矩陣的行數
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]這兩個參數的值為0。
im_data = dataset.ReadAsArray(0, 0, im_width, im_height) # 將數據寫成數組,對應柵格矩陣
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:指定當前圖像數據的數據類型,默認和輸入的im_data類型相同'''
# gdal數據類型包括
# gdal.GDT_Byte,
# gdal .GDT_UInt16, gdal.GDT_Int16, gdal.GDT_UInt32, gdal.GDT_Int32,
# gdal.GDT_Float32, gdal.GDT_Float64
# 判斷柵格數據的數據類型
if datatype is None: # im_data.dtype.name數據格式
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
# 判讀數組維數
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") # 數據類型必須有,因為要計算需要多大內存空間
dataset = driver.Create(filename, im_width, im_height, im_bands, datatype)
dataset.SetGeoTransform(im_geotrans) # 寫入仿射變換參數
dataset.SetProjection(im_proj) # 寫入投影
if im_bands == 1:
dataset.GetRasterBand(1).WriteArray(im_data) # 寫入數組數據
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)
#第二個參數是通道數和位深的參數,
#IMREAD_UNCHANGED = -1#不進行轉化,比如保存為了16位的圖片,讀取出來仍然為16位。
#IMREAD_GRAYSCALE = 0#進行轉化為灰度圖,比如保存為了16位的圖片,讀取出來為8位,類型為CV_8UC1。
#IMREAD_COLOR = 1#進行轉化為RGB三通道圖像,圖像深度轉為8位
#IMREAD_ANYDEPTH = 2#保持圖像深度不變,進行轉化為灰度圖。
#IMREAD_ANYCOLOR = 4#若圖像通道數小于等于3,則保持原通道數不變;若通道數大于3則只取取前三個通道。圖像深度轉為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()到此這篇關于python讀取與寫入tif圖片的完整信息的文章就介紹到這了,更多相關python讀取與寫入tif內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python使用numpy產生正態(tài)分布隨機數的向量或矩陣操作示例
這篇文章主要介紹了Python使用numpy產生正態(tài)分布隨機數的向量或矩陣操作,簡單描述了正態(tài)分布的概念并結合實例形式分析了Python使用numpy模塊結合matplotlib繪制正態(tài)分布曲線圖相關操作技巧,需要的朋友可以參考下2018-08-08
Python?dateutil庫簡化日期時間處理利器使用場景實踐
在Python中,處理日期和時間是常見的任務之一,dateutil庫是Python標準庫中datetime模塊的擴展,提供了許多方便的工具和函數,簡化了日期和時間的操作2023-12-12

