欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python讀取與寫入tif圖片的完整信息(過(guò)程詳解)

 更新時(shí)間:2023年05月01日 08:54:06   作者:兩只蠟筆的小新  
這篇文章主要介紹了python讀取與寫入tif圖片的完整信息,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論