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开发常用的一些开源Package分享
Feb 14 Python
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
python中csv文件的若干读写方法小结
Jul 04 Python
便捷提取python导入包的属性方法
Oct 15 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
python3中eval函数用法使用简介
Aug 02 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
Python搭建代理IP池实现检测IP的方法
Oct 27 Python
centos7中安装python3.6.4的教程
Dec 11 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
Scrapy实现模拟登录的示例代码
Feb 21 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新手上路(十三)
2006/10/09 PHP
php下intval()和(int)转换使用与区别
2008/07/18 PHP
php 破解防盗链图片函数
2008/12/09 PHP
orm获取关联表里的属性值
2016/04/17 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
VUE+node(express)实现前后端分离
2019/10/13 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
python实现按行切分文本文件的方法
2016/04/18 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
python求质数列表的例子
2019/11/24 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
环保建议书500字
2014/05/14 职场文书
商品陈列协议书
2014/09/29 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书