在python中利用GDAL对tif文件进行读写的方法


Posted in Python onNovember 29, 2018

利用GDAL库对tif影像进行读取

示例代码默认波段为[B、G、R、NIR的顺序,且为四个波段]

import gdal
def readTif(fileName):
 dataset = gdal.Open(fileName)
 if dataset == None:
  print(fileName+"文件无法打开")
  return
 im_width = dataset.RasterXSize #栅格矩阵的列数
 im_height = dataset.RasterYSize #栅格矩阵的行数
 im_bands = dataset.RasterCount #波段数
 im_data = dataset.ReadAsArray(0,0,im_width,im_height)#获取数据
 im_geotrans = dataset.GetGeoTransform()#获取仿射矩阵信息
 im_proj = dataset.GetProjection()#获取投影信息
 im_blueBand = im_data[0,0:im_height,0:im_width]#获取蓝波段
 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]#获取近红外波段

写tif影像函数

#保存tif文件函数
import gdal
import numpy as np
def 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
  #创建文件
 driver = gdal.GetDriverByName("GTiff")
 dataset = driver.Create(path, im_width, im_height, im_bands, datatype)
 if(dataset!= None):
  dataset.SetGeoTransform(im_geotrans) #写入仿射变换参数
  dataset.SetProjection(im_proj) #写入投影
 for i in range(im_bands):
  dataset.GetRasterBand(i+1).WriteArray(im_data[i])
 del dataset

以上这篇在python中利用GDAL对tif文件进行读写的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python字符串匹配算法KMP实例
Jul 18 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
Python实现读取txt文件并转换为excel的方法示例
May 17 Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 Python
Python中is和==的区别详解
Nov 15 Python
Python函数的参数常见分类与用法实例详解
Mar 30 Python
python将视频转换为全字符视频
Apr 26 Python
使用python爬取抖音视频列表信息
Jul 15 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
Python趣味入门教程之循环语句while
Aug 26 Python
使用python判断你是青少年还是老年人
Nov 29 #Python
pycham查看程序执行的时间方法
Nov 29 #Python
pycharm在调试python时执行其他语句的方法
Nov 29 #Python
Selenium chrome配置代理Python版的方法
Nov 29 #Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 #Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
Nov 29 #Python
python+unittest+requests实现接口自动化的方法
Nov 29 #Python
You might like
php阻止页面后退的方法分享
2014/02/17 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
php实现简单的上传进度条
2015/11/17 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
Python计算字符宽度的方法
2016/06/14 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
工商管理实习自我鉴定
2013/09/28 职场文书
意向书范文
2014/03/31 职场文书
活动总结模板
2014/05/09 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
销售工作决心书
2015/02/04 职场文书
业务内勤岗位职责
2015/04/13 职场文书
SQL之各种join小结详细讲解
2021/08/04 MySQL