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 相关文章推荐
Python3.6连接Oracle数据库的方法详解
May 18 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
Python argparse模块应用实例解析
Nov 15 Python
python操作gitlab API过程解析
Dec 27 Python
Python读取YAML文件过程详解
Dec 30 Python
使用pytorch和torchtext进行文本分类的实例
Jan 08 Python
解决Tensorflow sess.run导致的内存溢出问题
Feb 05 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
Python绘制词云图之可视化神器pyecharts的方法
Feb 23 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 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 include的妙用,实现路径加密
2008/07/29 PHP
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
Prototype框架详解
2015/11/25 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
django有哪些好处和优点
2020/09/01 Python
Python 内存管理机制全面分析
2021/01/16 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
建设工地安全标语
2014/06/07 职场文书
高中生逃课检讨书
2014/10/10 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
2014年路政工作总结
2014/12/10 职场文书
食品药品安全责任书
2015/05/11 职场文书
大学生求职意向书
2015/05/11 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
python flappy bird小游戏分步实现流程
2022/02/15 Python