在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通过函数属性实现全局变量的方法
May 16 Python
Python2.x利用commands模块执行Linux shell命令
Mar 11 Python
Python实现单词翻译功能
Jun 06 Python
python发送邮件脚本
May 22 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
Python中如何导入类示例详解
Apr 17 Python
python导入坐标点的具体操作
May 10 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
Pycharm打开已有项目配置python环境的方法
Jul 03 Python
Python 如何对文件目录操作
Jul 10 Python
Python 如何定义匿名或内联函数
Aug 01 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
建立动态的WML站点(二)
2006/10/09 PHP
简单的PHP图片上传程序
2008/03/27 PHP
数据库查询记录php 多行多列显示
2009/08/15 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
2010/05/15 PHP
PHP之数组学习
2011/05/29 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
python编程线性回归代码示例
2017/12/07 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
营销专业应届生求职信
2013/11/26 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
经验交流材料格式
2014/12/30 职场文书
小孩不笨观后感
2015/06/03 职场文书
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python