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人人网登录应用实例
Sep 26 Python
在Python中的Django框架中进行字符串翻译
Jul 27 Python
Python中定时任务框架APScheduler的快速入门指南
Jul 06 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
python 实现保存最新的三份文件,其余的都删掉
Dec 22 Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 03 Python
Python 机器学习工具包SKlearn的安装与使用
May 14 Python
pytorch 如何使用amp进行混合精度训练
May 24 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数据库操作类代码(增,删,改,查)
2013/04/08 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
Smarty保留变量用法分析
2016/05/23 PHP
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
Python 求数组局部最大值的实例
2019/11/26 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
美国知名艺术画网站:Art.com
2017/02/09 全球购物
机电专业体育教师求职信
2013/09/21 职场文书
新教师培训方案
2014/06/08 职场文书
社团活动总结格式
2014/08/29 职场文书
2014年德育工作总结
2014/11/20 职场文书
骨干教师事迹材料
2014/12/17 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
MySQL表的增删改查基础教程
2021/04/07 MySQL
Python中的socket网络模块介绍
2022/07/23 Python