Python 实现遥感影像波段组合的示例代码


Posted in Python onAugust 04, 2019

最近要做个遥感相关的小系统,需要波段组合功能,网上找了可以使用ArcGIS安装时自带的arcpy包,但是Python3.7不能使用现有ArcGIS10.2版本,也不想再装其他版本,所以只能自己想了个办法解决。不过有点笨啊。

思路是:

1.读取需要组合遥感影像波段(此处用OLI)  

2.创建数组,把读取的波段按序放进去  

3.写入文件,写成tif多波段数据

上代码:

from osgeo import gdal
import os
import numpy as np
 
class GRID:
 
  #读图像文件
  def read_img(self,filename):
    dataset=gdal.Open(filename)    #打开文件
 
    im_width = dataset.RasterXSize  #栅格矩阵的列数
    im_height = dataset.RasterYSize  #栅格矩阵的行数
 
    im_geotrans = dataset.GetGeoTransform() #仿射矩阵
    im_proj = dataset.GetProjection() #地图投影信息
    im_data = dataset.ReadAsArray(0,0,im_width,im_height) #将数据写成数组,对应栅格矩阵
 
    del dataset #关闭对象,文件dataset
    return im_proj,im_geotrans,im_data,im_width,im_height
 
  #写文件,以写成tif为例
  def write_img(self,filename,im_proj,im_geotrans,im_data):
 
    #判断栅格数据的数据类型
    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
    else:
      im_bands, (im_height, im_width) = 1,im_data.shape
 
    #创建文件
    driver = gdal.GetDriverByName("GTiff")  #数据类型必须有,因为要计算需要多大内存空间
    dataset = driver.Create(filename, im_width, im_height, im_bands, datatype)
 
    dataset.SetGeoTransform(im_geotrans)       #写入仿射变换参数
    dataset.SetProjection(im_proj)          #写入投影
 
    if im_bands == 1:
      dataset.GetRasterBand(1).WriteArray(im_data) #写入数组数据
    else:
      for i in range(im_bands):
        dataset.GetRasterBand(i+1).WriteArray(im_data[i])
 
    del dataset
 
if __name__ == "__main__":
  os.chdir(r'E:\Python\temp\data')            #切换路径到待处理图像所在文件夹
  run = GRID()
  #第一步
  proj,geotrans,data1,row1,column1 = run.read_img('Band_5_Clip.tif') #读数据
  proj,geotrans,data2,row2,column2= run.read_img('Band_4_Clip.tif') # 读数据
  proj,geotrans,data3,row3,column3 = run.read_img('Band_3_Clip.tif') # 读数据
 
  #第二步
  data = np.array((data1, data2, data3),dtype = data1.dtype) #按序将3个波段像元值放入
 
  #第三步
  run.write_img('com543.tif', proj, geotrans, data) # 写为3波段数据

OK!!和ArcGIS处理的对比一下,发现差别不大(上:ArcMap   下:Python)。

Python 实现遥感影像波段组合的示例代码

Python 实现遥感影像波段组合的示例代码

方法较笨,如果各位大神有更好的方法,我们可以私下交流交流。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python正则表达式匹配HTML页面编码
Apr 08 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
Python中fnmatch模块的使用详情
Nov 30 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
python 两个数据库postgresql对比
Oct 21 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 Python
Python -m参数原理及使用方法解析
Aug 21 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 #Python
详解用python生成随机数的几种方法
Aug 04 #Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 #Python
python中pygame安装过程(超级详细)
Aug 04 #Python
浅谈python图片处理Image和skimage的区别
Aug 04 #Python
Python下opencv图像阈值处理的使用笔记
Aug 04 #Python
python opencv 简单阈值算法的实现
Aug 04 #Python
You might like
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
javascript 动态添加表格行
2006/06/22 Javascript
javascript String 对象
2008/04/25 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
js数据类型检测总结
2018/08/05 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
Vue多选列表组件深入详解
2021/03/02 Vue.js
django的ORM模型的实现原理
2019/03/04 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python修改字典键(key)的方法
2019/08/05 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
super关键字的用法
2012/04/10 面试题
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
区优秀教师事迹材料
2014/02/10 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript