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的Template使用指南
Sep 11 Python
Python中使用Boolean操作符做真值测试实例
Jan 30 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
python+pandas分析nginx日志的实例
Apr 28 Python
Django 路由控制的实现代码
Nov 08 Python
详解python中的Turtle函数库
Nov 19 Python
python实现连连看辅助之图像识别延伸
Jul 17 Python
python+opencv实现车牌定位功能(实例代码)
Dec 24 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 Python
如何用Python 加密文件
Sep 10 Python
matplotlib grid()设置网格线外观的实现
Feb 22 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
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
node内置调试方法总结
2018/02/22 Javascript
基于Python实现一个简单的银行转账操作
2016/03/06 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
三严三实对照检查材料思想汇报
2014/09/28 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
高考1977观后感
2015/06/04 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server
win10更新失败无限重启解决方法
2022/04/19 数码科技