溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python怎么讀取與寫入tif圖片的完整信息

發(fā)布時間:2023-05-04 09:57:10 來源:億速云 閱讀:150 作者:zzz 欄目:開發(fā)技術(shù)

這篇文章主要介紹“python怎么讀取與寫入tif圖片的完整信息”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“python怎么讀取與寫入tif圖片的完整信息”文章能幫助大家解決問題。

    python讀取與寫入tif圖片的完整信息

    一、導(dǎo)入gdal包

    在anconda環(huán)境下:

    conda install gdal

    在其他環(huán)境下,去這個網(wǎng)站下載gdal包,直接使用pip install gdal是不行的

    python怎么讀取與寫入tif圖片的完整信息

    注意:

    對于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]是像元高度 負(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

     #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

    補(bǔ)充:用python讀取tif格式圖像,opencv讀取

    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)。

    向AI問一下細(xì)節(jié)

    免責(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)容。

    AI