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实现的jpg格式图片修复代码
Apr 21 Python
浅谈MySQL中的触发器
May 05 Python
Python字符串切片操作知识详解
Mar 28 Python
python3实现跳一跳点击跳跃
Jan 08 Python
Python for循环生成列表的实例
Jun 15 Python
Python实现重建二叉树的三种方法详解
Jun 23 Python
python 自动重连wifi windows的方法
Dec 18 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
Python如何自动获取目标网站最新通知
Jun 18 Python
基于Python爬取fofa网页端数据过程解析
Jul 13 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 Python
Python 文字识别
May 11 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
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
Python中asyncore的用法实例
2014/09/29 Python
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
初中同学聚会邀请函
2014/02/03 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
维稳工作情况汇报
2014/10/27 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
教师聘用意向书
2015/05/11 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python
分享Python获取本机IP地址的几种方法
2022/03/17 Python