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中optparse模块使用浅析
Jan 01 Python
在Python的循环体中使用else语句的方法
Mar 30 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
利用Hyperic调用Python实现进程守护
Jan 02 Python
Python pandas.DataFrame 找出有空值的行
Sep 09 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
python tornado使用流生成图片的例子
Nov 18 Python
python实现PCA降维的示例详解
Feb 24 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
Python基础之进程详解
May 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
Zend的MVC机制使用分析(一)
2013/05/02 PHP
php实例分享之二维数组排序
2014/05/15 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
PHP7常量数组用法分析
2016/09/26 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
vue ssr 指南详读
2018/06/29 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
python图像处理之镜像实现方法
2015/05/30 Python
基python实现多线程网页爬虫
2015/09/06 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
公共场所禁烟倡议书
2014/08/30 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
2014年销售员工作总结
2014/12/01 职场文书
2015年党建工作总结
2015/03/30 职场文书
关于职业道德的心得体会
2016/01/18 职场文书