對(duì)Python3+gdal 讀取tiff格式數(shù)據(jù)的實(shí)例講解
1、遇到的問(wèn)題:numpy版本
im_data = dataset.ReadAsArray(0,0,im_width,im_height)#獲取數(shù)據(jù) 這句報(bào)錯(cuò)
升級(jí)numpy:pip install -U numpy 但是提示已經(jīng)是最新版本
解決:卸載numpy 重新安裝
2.直接從壓縮包中讀取tiff圖像
參考:http://gdal.org/gdal_virtual_file_systems.html#gdal_virtual_file_systems_vsizip
當(dāng)前情況是2層壓縮: /'/vsitar/C:/Users/summer/Desktop/a_PAN1.tiff'
3.讀tiff
def readTif(fileName): merge_img = 0 driver = gdal.GetDriverByName('GTiff') driver.Register() dataset = gdal.Open(fileName) if dataset == None: print(fileName+ "掩膜失敗,文件無(wú)法打開") return im_width = dataset.RasterXSize #柵格矩陣的列數(shù) print('im_width:', im_width) im_height = dataset.RasterYSize #柵格矩陣的行數(shù) print('im_height:', im_height) im_bands = dataset.RasterCount #波段數(shù) im_geotrans = dataset.GetGeoTransform()#獲取仿射矩陣信息 im_proj = dataset.GetProjection()#獲取投影信息 if im_bands == 1: band = dataset.GetRasterBand(1) im_data = dataset.ReadAsArray(0,0,im_width,im_height) #獲取數(shù)據(jù) cdata = im_data.astype(np.uint8) merge_img = cv2.merge([cdata,cdata,cdata]) cv2.imwrite('C:/Users/summer/Desktop/a.jpg', merge_img) # elif im_bands == 4: # # im_data = dataset.ReadAsArray(0,0,im_width,im_height)#獲取數(shù)據(jù) # # im_blueBand = im_data[0,0:im_width,0:im_height] #獲取藍(lán)波段 # # im_greenBand = im_data[1,0:im_width,0:im_height] #獲取綠波段 # # im_redBand = im_data[2,0:im_width,0:im_height] #獲取紅波段 # # # im_nirBand = im_data[3,0:im_width,0:im_height] #獲取近紅外波段 # # merge_img=cv2.merge([im_redBand,im_greenBand,im_blueBand]) # # zeros = np.zeros([im_height,im_width],dtype = "uint8") # # data1 = im_redBand.ReadAsArray # band1=dataset.GetRasterBand(1) # band2=dataset.GetRasterBand(2) # band3=dataset.GetRasterBand(3) # band4=dataset.GetRasterBand(4) data1=band1.ReadAsArray(0,0,im_width,im_height).astype(np.uint16) #r #獲取數(shù)據(jù) data2=band2.ReadAsArray(0,0,im_width,im_height).astype(np.uint16) #g #獲取數(shù)據(jù) data3=band3.ReadAsArray(0,0,im_width,im_height).astype(np.uint16) #b #獲取數(shù)據(jù) data4=band4.ReadAsArray(0,0,im_width,im_height).astype(np.uint16) #R #獲取數(shù)據(jù) # print(data1[1][45]) # output1= cv2.convertScaleAbs(data1, alpha=(255.0/65535.0)) # print(output1[1][45]) # output2= cv2.convertScaleAbs(data2, alpha=(255.0/65535.0)) # output3= cv2.convertScaleAbs(data3, alpha=(255.0/65535.0)) merge_img1 = cv2.merge([output3,output2,output1]) #B G R cv2.imwrite('C:/Users/summer/Desktop/merge_img1.jpg', merge_img1)
4.圖像裁剪:
import cv2 import numpy as np import os tiff_file = './try_img/2.tiff' save_folder = './try_img_re/' if not os.path.exists(save_folder): os.makedirs(save_folder) tif_img = cv2.imread(tiff_file) width, height, channel = tif_img.shape # print height, width, channel : 6908 7300 3 threshold = 1000 overlap = 100 step = threshold - overlap x_num = width/step + 1 y_num = height/step + 1 print x_num, y_num N = 0 yj = 0 for xi in range(x_num): for yj in range(y_num): # print xi if yj <= y_num: print yj x = step*xi y = step*yj wi = min(width,x+threshold) hi = min(height,y+threshold) # print wi , hi if wi-x < 1000 and hi-y < 1000: im_block = tif_img[wi-1000:wi, hi-1000:hi] elif wi-x > 1000 and hi-y < 1000: im_block = tif_img[x:wi, hi-1000:hi] elif wi-x < 1000 and hi-y > 1000: im_block = tif_img[wi-1000:wi, y:hi] else: im_block = tif_img[x:wi,y:hi] cv2.imwrite(save_folder + 'try' + str(N) + '.jpg', im_block) N += 1
以上這篇對(duì)Python3+gdal 讀取tiff格式數(shù)據(jù)的實(shí)例講解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python正則表達(dá)式中g(shù)roup與groups的用法詳解
本文主要介紹了Python正則表達(dá)式中g(shù)roup與groups的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Python3獲取電腦IP、主機(jī)名、Mac地址的方法示例
這篇文章主要介紹了Python3獲取電腦IP、主機(jī)名、Mac地址的方法,結(jié)合具體實(shí)例形式分析了Python3基于socket與uuid模塊針對(duì)電腦的IP、主機(jī)名、Mac地址等信息的讀取操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-04-04python之實(shí)現(xiàn)兩個(gè)或多個(gè)列表相加
這篇文章主要介紹了python之實(shí)現(xiàn)兩個(gè)或多個(gè)列表相加方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08跟老齊學(xué)Python之使用Python操作數(shù)據(jù)庫(kù)(1)
本文詳細(xì)講述了使用python操作數(shù)據(jù)庫(kù)所需要了解的知識(shí)以及準(zhǔn)備工作,十分的詳盡,這里推薦給想學(xué)習(xí)python的小伙伴。2014-11-11Python必備技巧之Pandas數(shù)據(jù)合并函數(shù)
Pandas中一共有五個(gè)數(shù)據(jù)合并函數(shù),分別為:concat、append、merge、join、combine,本文詳細(xì)講解這五個(gè)函數(shù)的使用方法,需要的可以參考一下2022-03-03Django之使用內(nèi)置函數(shù)和celery發(fā)郵件的方法示例
這篇文章主要介紹了Django之使用內(nèi)置函數(shù)和celery發(fā)郵件的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09python內(nèi)置函數(shù):lambda、map、filter簡(jiǎn)單介紹
Python 內(nèi)置了一些比較特殊且實(shí)用的函數(shù),使用這些能使你的代碼簡(jiǎn)潔而易讀。下面對(duì)python內(nèi)置函數(shù):lambda、map、filter簡(jiǎn)單介紹下,需要的朋友參考下吧2017-11-11Python機(jī)器學(xué)習(xí)之預(yù)測(cè)黃金價(jià)格
這篇文章主要介紹了如何使用機(jī)器學(xué)習(xí)方法來(lái)預(yù)測(cè)最重要的貴金屬之一黃金的價(jià)格,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以試一試2022-01-01