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内置变量-reversed(seq)
Jun 21 Python
利用python求相邻数的方法示例
Aug 18 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
解决Django的request.POST获取不到内容的问题
May 28 Python
python实现图片批量压缩程序
Jul 23 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 Python
Python Flask框架模板操作实例分析
May 03 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 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
Home Coffee Roasting
2021/03/03 咖啡文化
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
php快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
jQuery技巧总结
2011/01/01 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
jQuery链使用指南
2015/01/20 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
对Js OOP编程 创建对象的一些全面理解
2016/07/26 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
在漏洞利用Python代码真的很爽
2007/08/26 Python
python生成指定长度的随机数密码
2014/01/23 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
python实现LRU热点缓存及原理
2019/10/29 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
保卫科工作岗位职责
2014/03/01 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
幼儿园家长寄语
2014/04/02 职场文书
求职自我推荐信
2014/06/25 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
详解Go语言中Get/Post请求测试
2022/06/01 Golang