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 相关文章推荐
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
Python之Scrapy爬虫框架安装及简单使用详解
Dec 22 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
May 26 Python
python3之模块psutil系统性能信息使用
May 30 Python
对Pycharm创建py文件时自定义头部模板的方法详解
Feb 12 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
解决python运行效率不高的问题
Jul 20 Python
python 将html转换为pdf的几种方法
Dec 29 Python
Python requests用法和django后台处理详解
Mar 19 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
用PHP程序实现支持页面后退的两种方法
2008/06/30 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
初识laravel5
2015/03/02 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
Python下载的11种姿势(小结)
2020/11/18 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
客服服务心得体会
2013/12/30 职场文书
装修五一活动策划案
2014/01/23 职场文书
技能比赛获奖感言
2014/02/14 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
优秀党员申报材料
2014/12/18 职场文书
大学生求职意向书
2015/05/11 职场文书