在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查找第k小元素代码分享
Dec 18 Python
Python多线程爬虫简单示例
Mar 04 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
python版本五子棋的实现代码
Dec 11 Python
python矩阵的转置和逆转实例
Dec 12 Python
python requests指定出口ip的例子
Jul 25 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
使用python制作一个解压缩软件
Nov 13 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 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入门源程序
2006/10/09 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
js window.event对象详尽解析
2009/02/17 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
JavaScript实用技巧(一)
2010/08/16 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
详解python中的异常和文件读写
2021/01/03 Python
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
党课知识竞赛主持词
2014/04/01 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
年度考核表个人总结
2015/03/06 职场文书
质检员岗位职责范本
2015/04/07 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
学生会任命书范本
2015/09/21 职场文书
医学会议开幕词
2016/03/03 职场文书
分享提高 Python 代码的可读性的技巧
2022/03/03 Python
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android