日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

利用Python裁切tiff圖像且讀取tiff,shp文件的實(shí)例

瀏覽:144日期:2022-08-02 17:48:26

我就廢話不多說了,還是直接看代碼吧!

from osgeo import gdal, gdalnumeric, ogrfrom PIL import Image, ImageDrawfrom osgeo import gdal_arrayimport osimport operatorfrom functools import reducegdal.UseExceptions() def readTif(fileName): dataset = gdal.Open(fileName) if dataset == None: print(fileName+'文件無法打開') return im_width = dataset.RasterXSize #柵格矩陣的列數(shù) im_height = dataset.RasterYSize #柵格矩陣的行數(shù) im_bands = dataset.RasterCount #波段數(shù) band1=dataset.GetRasterBand(1) print(band1) print (’Band Type=’,gdal.GetDataTypeName(band1.DataType)) im_data = dataset.ReadAsArray(0,0,im_width,im_height)#獲取數(shù)據(jù) im_geotrans = dataset.GetGeoTransform()#獲取仿射矩陣信息 im_proj = dataset.GetProjection()#獲取投影信息 im_blueBand = im_data[0,0:im_height,0:im_width]#獲取藍(lán)波段 im_greenBand = im_data[1,0:im_height,0:im_width]#獲取綠波段 im_redBand = im_data[2,0:im_height,0:im_width]#獲取紅波段 im_nirBand = im_data[3,0:im_height,0:im_width]#獲取近紅外波段 return(im_width,im_height,im_bands,im_data,im_geotrans ,im_proj,im_blueBand,im_greenBand,im_redBand,im_nirBand)#保存tif文件函數(shù)import gdalimport numpy as npdef writeTiff(im_data,im_width,im_height,im_bands,im_geotrans,im_proj,path): 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 elif len(im_data.shape) == 2: im_data = np.array([im_data]) else: im_bands, (im_height, im_width) = 1,im_data.shape #創(chuàng)建文件 driver = gdal.GetDriverByName('GTiff') dataset = driver.Create(path, im_width, im_height, im_bands, datatype) if(dataset!= None): dataset.SetGeoTransform(im_geotrans) #寫入仿射變換參數(shù) dataset.SetProjection(im_proj) #寫入投影 for i in range(im_bands): dataset.GetRasterBand(i+1).WriteArray(im_data[i]) del dataset # This function will convert the rasterized clipper shapefile# to a mask for use within GDAL.def imageToArray(i): ''' Converts a Python Imaging Library array to a gdalnumeric image. ''' a=gdalnumeric.fromstring(i.tobytes(),’b’) a.shape=i.im.size[1], i.im.size[0] return a def arrayToImage(a): ''' Converts a gdalnumeric array to a Python Imaging Library Image. ''' i=Image.frombytes(’L’,(a.shape[1],a.shape[0]), (a.astype(’b’)).tobytes()) return i def world2Pixel(geoMatrix, x, y): ''' Uses a gdal geomatrix (gdal.GetGeoTransform()) to calculate the pixel location of a geospatial coordinate ''' ulX = geoMatrix[0] ulY = geoMatrix[3] xDist = geoMatrix[1] pixel = int((x - ulX) / xDist) line = int((ulY - y) / xDist) return (pixel, line) ## EDIT: this is basically an overloaded# version of the gdal_array.OpenArray passing in xoff, yoff explicitly# so we can pass these params off to CopyDatasetInfo#def OpenArray( array, prototype_ds = None, xoff=0, yoff=0 ): ds =gdal_array.OpenArray(array) if ds is not None and prototype_ds is not None: if type(prototype_ds).__name__ == ’str’: prototype_ds = gdal.Open( prototype_ds ) if prototype_ds is not None: gdalnumeric.CopyDatasetInfo( prototype_ds, ds, xoff=xoff, yoff=yoff ) return dsdef histogram(a, bins=range(0,256)): ''' Histogram function for multi-dimensional array. a = array bins = range of numbers to match ''' fa = a.flat n = gdalnumeric.searchsorted(gdalnumeric.sort(fa), bins) n = gdalnumeric.concatenate([n, [len(fa)]]) hist = n[1:]-n[:-1] return hist def stretch(a): ''' Performs a histogram stretch on a gdalnumeric array image. ''' hist = histogram(a) im = arrayToImage(a) lut = [] for b in range(0, len(hist), 256): # step size step = reduce(operator.add, hist[b:b+256]) / 255 # create equalization lookup table n = 0 for i in range(256): lut.append(n / step) n = n + hist[i+b] im = im.point(lut) return imageToArray(im) def main( shapefile_path, raster_path ): # Load the source data as a gdalnumeric array srcArray = gdalnumeric.LoadFile(raster_path) # Also load as a gdal image to get geotransform # (world file) info srcImage = gdal.Open(raster_path) geoTrans = srcImage.GetGeoTransform() # Create an OGR layer from a boundary shapefile shapef = ogr.Open(shapefile_path) lyr = shapef.GetLayer( os.path.split( os.path.splitext( shapefile_path )[0] )[1] ) poly = lyr.GetNextFeature() # Convert the layer extent to image pixel coordinates minX, maxX, minY, maxY = lyr.GetExtent() ulX, ulY = world2Pixel(geoTrans, minX, maxY) lrX, lrY = world2Pixel(geoTrans, maxX, minY) # Calculate the pixel size of the new image pxWidth = int(lrX - ulX) pxHeight = int(lrY - ulY) clip = srcArray[:, ulY:lrY, ulX:lrX] # # EDIT: create pixel offset to pass to new image Projection info # xoffset = ulX yoffset = ulY print ('Xoffset, Yoffset = ( %f, %f )' % ( xoffset, yoffset )) # Create a new geomatrix for the image geoTrans = list(geoTrans) geoTrans[0] = minX geoTrans[3] = maxY # Map points to pixels for drawing the # boundary on a blank 8-bit, # black and white, mask image. points = [] pixels = [] geom = poly.GetGeometryRef() pts = geom.GetGeometryRef(0) for p in range(pts.GetPointCount()): points.append((pts.GetX(p), pts.GetY(p))) for p in points: pixels.append(world2Pixel(geoTrans, p[0], p[1])) rasterPoly = Image.new('L', (pxWidth, pxHeight), 1) rasterize = ImageDraw.Draw(rasterPoly) rasterize.polygon(pixels, 0) mask = imageToArray(rasterPoly) # Clip the image using the mask clip = gdalnumeric.choose(mask, (clip, 0)).astype(gdalnumeric.uint8) # This image has 3 bands so we stretch each one to make them # visually brighter for i in range(4): clip[i,:,:] = stretch(clip[i,:,:]) # Save new tiff # # EDIT: instead of SaveArray, let’s break all the # SaveArray steps out more explicity so # we can overwrite the offset of the destination # raster # ### the old way using SaveArray # # gdalnumeric.SaveArray(clip, 'OUTPUT.tif', format='GTiff', prototype=raster_path) # ### # gtiffDriver = gdal.GetDriverByName( ’GTiff’ ) if gtiffDriver is None: raise ValueError('Can’t find GeoTiff Driver') gtiffDriver.CreateCopy( 'beijing1.tif', OpenArray( clip, prototype_ds=raster_path, xoff=xoffset, yoff=yoffset ) ) print(raster_path) # Save as an 8-bit jpeg for an easy, quick preview clip = clip.astype(gdalnumeric.uint8) gdalnumeric.SaveArray(clip, 'beijing1.jpg', format='JPEG') gdal.ErrorReset() if __name__ == ’__main__’: #shapefile_path, raster_path shapefile_path = r’C:UsersAdministratorDesktop裁切shpNew_Shapefile.shp’ raster_path = r’C:UsersAdministratorDesktop2230542.tiff’ main( shapefile_path, raster_path )

補(bǔ)充知識(shí):python代碼裁剪tiff影像圖和轉(zhuǎn)換成png格式+裁剪Png圖片

先來看一下需要轉(zhuǎn)換的tiff原始圖的信息,如下圖所示。

利用Python裁切tiff圖像且讀取tiff,shp文件的實(shí)例

tiff轉(zhuǎn)換成png和裁剪tiff的代碼(opencv)

import cv2 as cvimport os''' 轉(zhuǎn)換tiff格式為png + 橫向裁剪tiff遙感影像圖'''def Convert_To_Png_AndCut(dir): files = os.listdir(dir) ResultPath1 = './RS_ToPngDir/' # 定義轉(zhuǎn)換格式后的保存路徑 ResultPath2 = './RS_Cut_Result/' # 定義裁剪后的保存路徑 ResultPath3 = './RS_Cut_Result/' # 定義裁剪后的保存路徑 for file in files: # 這里可以去掉for循環(huán) a, b = os.path.splitext(file) # 拆分影像圖的文件名稱 this_dir = os.path.join(dir + file) # 構(gòu)建保存 路徑+文件名img = cv.imread(this_dir, 1) # 讀取tif影像 # 第二個(gè)參數(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則只取取前三個(gè)通道。圖像深度轉(zhuǎn)為8位cv.imwrite(ResultPath1 + a + '_' + '.png', img) # 保存為png格式# 下面開始裁剪-不需要裁剪tiff格式的可以直接注釋掉 hight = img.shape[0] #opencv寫法,獲取寬和高 width = img.shape[1] #定義裁剪尺寸 w = 480 # 寬度 h = 360 # 高度 _id = 1 # 裁剪結(jié)果保存文件名:0 - N 升序方式 i = 0 while (i + h <= hight): # 控制高度,圖像多余固定尺寸總和部分不要了 j = 0 while (j + w <= width): # 控制寬度,圖像多余固定尺寸總和部分不要了cropped = img[i:i + h, j:j + w] # 裁剪坐標(biāo)為[y0:y1, x0:x1]cv.imwrite(ResultPath2 + a + '_' + str(_id) + b, cropped)_id += 1j += w i = i + h''' 橫向裁剪PNG圖'''def toCutPng(dir): files = os.listdir(dir) ResultPath = './RS_CutPng_Result/' # 定義裁剪后的保存路徑 for file in files: a, b = os.path.splitext(file) # 拆分影像圖的文件名稱 this_dir = os.path.join(dir + file) img = Image.open(this_dir) # 按順序打開某圖片 width, hight = img.size w = 480 # 寬度 h = 360 # 高度 _id = 1 # 裁剪結(jié)果保存文件名:0 - N 升序方式 y = 0 while (y + h <= hight): # 控制高度,圖像多余固定尺寸總和部分不要了 x = 0 while (x + w <= width): # 控制寬度,圖像多余固定尺寸總和部分不要了new_img = img.crop((x, y, x + w, y + h))new_img.save(ResultPath + a + '_' + str(_id) + b)_id += 1x += w y = y + hif __name__ == ’__main__’: _path = r'./RS_TiffDir/' # 遙感tiff影像所在路徑 # 裁剪影像圖 Convert_To_Png_AndCut(_path)

將轉(zhuǎn)換成png后的圖加載到軟件中(專業(yè)軟件ENVI5.3)查看結(jié)果詳細(xì)信息如下圖所示,成功的轉(zhuǎn)換成png格式了。

利用Python裁切tiff圖像且讀取tiff,shp文件的實(shí)例

下面是加載裁剪后的影像圖(Tiff格式的)

利用Python裁切tiff圖像且讀取tiff,shp文件的實(shí)例

def toCutPng(dir):函數(shù)效果圖如下圖所示。

以上這篇利用Python裁切tiff圖像且讀取tiff,shp文件的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产美女精品| 亚洲精品乱码日韩| 亚洲aⅴ网站| 丝袜亚洲另类欧美| 91精品国产福利在线观看麻豆| 国产精品亚洲人成在99www| 日韩一区二区三免费高清在线观看| 蜜臀久久99精品久久久久宅男| 红桃视频国产一区| 男人操女人的视频在线观看欧美| 蜜臀91精品一区二区三区| 蜜臀久久久99精品久久久久久| 亚洲天堂黄色| 午夜亚洲一区| 日韩极品在线观看| 国产欧美69| 精品一区二区三区亚洲| 精品久久久亚洲| 欧美影院三区| 日韩精品中文字幕吗一区二区 | 亚州av一区| 国产精品亚洲综合在线观看| 久久久精品国产**网站| 亚洲成人精品| 综合国产精品| 欧美欧美黄在线二区| 精品视频高潮| 国产美女一区| 精品国产亚洲一区二区三区大结局 | 桃色一区二区| 日本午夜精品久久久久| 麻豆理论在线观看| 免费久久99精品国产| 国产精品欧美大片| 午夜国产一区二区| 国产亚洲人成a在线v网站| 精品美女在线视频| 亚洲一区日韩在线| 精品免费视频| 日韩和欧美的一区| 91超碰国产精品| 欧美激情综合| 日韩一区中文| 99视频一区| 99久久久久| 精品久久97| 国产图片一区| 亚洲欧美久久精品| 999视频精品| 大香伊人久久精品一区二区| 亚洲影院天堂中文av色| 久久精品一区二区国产| 影音先锋国产精品| 国产aⅴ精品一区二区三区久久| 亚洲精品日本| 免费人成精品欧美精品| 婷婷成人在线| 国产在线不卡一区二区三区 | 亚洲激情精品| 婷婷激情久久| 国产成人精品亚洲日本在线观看| 久久中文在线| 久久国产人妖系列| 日韩在线黄色| 国产视频一区三区| 91精品91| 亚洲激情久久| 久久婷婷丁香| 久久精品二区三区| 欧美日韩精品免费观看视完整| 韩国久久久久久| 正在播放日韩精品| 日韩a一区二区| 国产精品伦理久久久久久| 精品国产一区二区三区av片| 国产精品99久久免费观看| 日韩高清二区| 欧美成a人片免费观看久久五月天| 国产午夜一区| 麻豆中文一区二区| 日韩在线短视频| 中文精品在线| 日韩avvvv在线播放| 国产精品成人**免费视频 | 久久99精品久久久野外观看| 欧美91在线|欧美| 日本不卡免费高清视频在线| 欧美黄色网页| 欧美 日韩 国产一区二区在线视频| 亚洲黄页一区| 日本欧美一区二区| 九九99久久精品在免费线bt| 亚洲欧洲美洲av| 91高清一区| 日本特黄久久久高潮| 日韩高清成人| 日韩精品电影一区亚洲| 国产精品原创| 美女网站久久| 久久精品国产免费| 欧美日韩国产一区二区三区不卡| 日韩av三区| 国产精品久久久免费| 亚洲精品一级二级| 欧美天堂一区| 怡红院精品视频在线观看极品| 国产精品高清一区二区| 日本蜜桃在线观看视频| 日韩专区一卡二卡| 久久久精品日韩| 国产劲爆久久| 亚洲日本免费电影| 国内亚洲精品| 国产 日韩 欧美一区| 欧美激情网址| 91亚洲无吗| 日韩精品一区二区三区中文在线| 日韩精品首页| 98精品久久久久久久| 国产精品s色| 国产无遮挡裸体免费久久| 日韩影院精彩在线| 久久久777| 日韩中文在线电影| а√天堂8资源在线| 欧美经典一区| 欧美精品导航| 久久成人高清| 精品一区av| 免费观看亚洲天堂| 国产一区二区三区四区五区传媒 | 成人欧美一区二区三区的电影| 国产精品多人| 成人影视亚洲图片在线| 粉嫩av一区二区三区四区五区| 欧美黑人做爰爽爽爽| 日韩高清一区| 国产精品免费精品自在线观看| 国产精品v亚洲精品v日韩精品| 国产精品日本一区二区不卡视频 | 亚洲精品激情| 国产欧美日韩视频在线| 蜜桃精品视频| 日韩一区电影| 在线亚洲欧美| 中文日韩在线| 首页国产欧美久久| 欧美日韩1区| а√在线中文在线新版| 91久久久久| 久久精品99久久久| 视频在线不卡免费观看| 久久九九99| 亚洲毛片网站| 精品福利久久久| 99riav国产精品| 国产精品大片| 欧美日韩国产免费观看| 亚洲精品在线a| 国产精品成人a在线观看| 欧美成a人免费观看久久| 99riav1国产精品视频| 国产人成精品一区二区三| 精品国产a一区二区三区v免费| 红桃视频国产精品| 国产精品白浆| 综合激情视频| 天堂√中文最新版在线| 中文字幕日韩高清在线| 精品精品久久| 日本欧美韩国一区三区| 91精品亚洲| 国产一区二区三区黄网站| 亚洲日产国产精品| 亚洲成人精品| 国产三级一区| 伊人久久亚洲| 91精品蜜臀一区二区三区在线| 欧美欧美黄在线二区| 国产亚洲福利| 久久精品免费一区二区三区| 国产精品对白| 日韩美女国产精品| 国产偷自视频区视频一区二区| 国产白浆在线免费观看| 欧美在线看片| 在线精品视频一区| 丝袜诱惑制服诱惑色一区在线观看 | 久久国产66| av一区二区高清| 久久精品国内一区二区三区水蜜桃| 久久爱www成人| 国产日韩中文在线中文字幕| 久久成人亚洲| 老牛影视一区二区三区| 宅男在线一区| 亚洲午夜久久久久久尤物| 久久国产中文字幕| 香蕉久久精品| 欧美va天堂在线|