對Python3+gdal 讀取tiff格式數(shù)據(jù)的實例講解
1、遇到的問題:numpy版本
im_data = dataset.ReadAsArray(0,0,im_width,im_height)#獲取數(shù)據(jù) 這句報錯
升級numpy:pip install -U numpy 但是提示已經(jīng)是最新版本
解決:卸載numpy 重新安裝
2.直接從壓縮包中讀取tiff圖像
參考:http://gdal.org/gdal_virtual_file_systems.html#gdal_virtual_file_systems_vsizip
當前情況是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+ "掩膜失敗,文件無法打開") 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] #獲取藍波段 # # 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
以上這篇對Python3+gdal 讀取tiff格式數(shù)據(jù)的實例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python正則表達式中g(shù)roup與groups的用法詳解
本文主要介紹了Python正則表達式中g(shù)roup與groups的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02跟老齊學(xué)Python之使用Python操作數(shù)據(jù)庫(1)
本文詳細講述了使用python操作數(shù)據(jù)庫所需要了解的知識以及準備工作,十分的詳盡,這里推薦給想學(xué)習(xí)python的小伙伴。2014-11-11Python必備技巧之Pandas數(shù)據(jù)合并函數(shù)
Pandas中一共有五個數(shù)據(jù)合并函數(shù),分別為:concat、append、merge、join、combine,本文詳細講解這五個函數(shù)的使用方法,需要的可以參考一下2022-03-03Django之使用內(nèi)置函數(shù)和celery發(fā)郵件的方法示例
這篇文章主要介紹了Django之使用內(nèi)置函數(shù)和celery發(fā)郵件的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09python內(nèi)置函數(shù):lambda、map、filter簡單介紹
Python 內(nèi)置了一些比較特殊且實用的函數(shù),使用這些能使你的代碼簡潔而易讀。下面對python內(nèi)置函數(shù):lambda、map、filter簡單介紹下,需要的朋友參考下吧2017-11-11Python機器學(xué)習(xí)之預(yù)測黃金價格
這篇文章主要介紹了如何使用機器學(xué)習(xí)方法來預(yù)測最重要的貴金屬之一黃金的價格,文中的示例代碼講解詳細,感興趣的小伙伴可以試一試2022-01-01