在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实现排序算法
Feb 14 Python
python实现DNS正向查询、反向查询的例子
Apr 25 Python
Python中字符编码简介、方法及使用建议
Jan 08 Python
python任务调度实例分析
May 19 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
Python分支结构(switch)操作简介
Jan 17 Python
Python Django 添加首页尾页上一页下一页代码实例
Aug 21 Python
详解Python文件修改的两种方式
Aug 22 Python
python实现对变位词的判断方法
Apr 05 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
宝塔更新Python及Flask项目的部署
Apr 11 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递归调用与静态变量使用
2012/12/16 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
php常用hash加密函数
2014/11/22 PHP
PHP数组相关函数汇总
2015/03/24 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
JavaScript 事件的一些重要说明
2009/10/25 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
Python定时器实例代码
2017/11/01 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
Python实现的特征提取操作示例
2018/12/03 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
python如何处理程序无法打开
2020/06/16 Python
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
护理专业推荐信
2013/11/07 职场文书
经济国贸专业求职信
2014/06/18 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
Redis 常见使用场景
2021/08/30 Redis
MySQL 开窗函数
2022/02/15 MySQL
利用Python实现模拟登录知乎
2022/05/25 Python
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android