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 ZipFile模块详解
Nov 01 Python
发布你的Python模块详解
Sep 15 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
Python os.access()用法实例
Feb 18 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
OpenCV python sklearn随机超参数搜索的实现
Jan 17 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
完美解决keras 读取多个hdf5文件进行训练的问题
Jul 01 Python
python3.4中清屏的处理方法
Jul 06 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 获取本地IP代码
2013/06/23 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
Python实现批量检测HTTP服务的状态
2016/10/27 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
python+opencv识别图片中的圆形
2020/03/25 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
房产继承公证书
2014/04/09 职场文书
校园环保标语
2014/06/13 职场文书
好的促销活动方案
2014/08/21 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python