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 fileinput模块使用介绍
Nov 30 Python
总结python爬虫抓站的实用技巧
Aug 09 Python
python unittest实现api自动化测试
Apr 04 Python
Python 创建空的list,以及append用法讲解
May 04 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
Python笔记之工厂模式
Nov 20 Python
Python基于pygame实现单机版五子棋对战
Dec 26 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 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生成excel列序号代码实例
2013/12/24 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
php实现socket推送技术的示例
2017/12/20 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
Python yield使用方法示例
2013/12/04 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
Numpy之random函数使用学习
2019/01/29 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
餐厅总经理岗位职责
2013/12/31 职场文书
上班睡觉检讨书
2014/01/09 职场文书
活动总结模板
2014/05/09 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
民主生活会汇报材料
2014/12/15 职场文书
七一建党节慰问信
2015/02/14 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
大学校园招聘会感想
2015/08/10 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
Pytest中conftest.py的用法
2021/06/27 Python