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 02 Python
Python判断文件和文件夹是否存在的方法
May 21 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
Jul 17 Python
python scipy求解非线性方程的方法(fsolve/root)
Nov 12 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
Python如何将装饰器定义为类
Jul 30 Python
python基于opencv实现人脸识别
Jan 04 Python
 Python 中 logging 模块使用详情
Mar 03 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
再说下636单管机
2021/03/02 无线电
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
浅谈scrapy 的基本命令介绍
2017/06/13 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
python保留小数位的三种实现方法
2020/01/07 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
工商管理专业自荐信
2014/06/03 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
Java8中Stream的一些神操作
2021/11/02 Java/Android