点击上方蓝字关注我们

 基本操作第二辑+简单波段合成。

一.基本操作

通过gdal提供的GetDriverByName方法构建一个driver对象。其中file_format是想要保存的数据对象。(关于gdal支持的栅格驱动对象,可以通过https://gdal.org/drivers/raster/index.html进行查询,常见的shp,hdr,tif等都包括在内)

driver.Create(filename,xsize,ysize,bands,data_type)'''filename 创建的数据集的路径xsize 新数据集的列数ysize 新数据集的行数bands 新数据集的波段数data_type 将要存储在新数据集中的数据类型'''

通过driver对象的Create方法构建一个新的数据集,通常需要填入的参数是,文件名,数据的xsize和ysize,波段通道数目,和gdal数据类型

(ps: gdal的数据类型大概有以下几种:

GDT_Byte = 1(C++中对应unsigned char)    GDT_CFloat32 = 10    GDT_CFloat64 = 11    GDT_CInt16 = 8    GDT_CInt32 = 9    GDT_Float32 = 6(C++中对应float)    GDT_Float64 = 7 (C++中对应double)    GDT_Int16 = 3(C++中对应 short 或 short int)    GDT_Int32 = 5(C++中对应int 或 long 或 long int)    GDT_TypeCount = 12    GDT_UInt16 = 2(C++中对应 unsigned short)    GDT_UInt32 = 4(C++中对应unsigned long)    GDT_Unknown = 0未知数据类型    GFT_Integer = 0    GFT_Real = 1    GFT_String = 2

)

二.简单波段合成

波段合成使用Landsat8 OLI影像,Landsat 8 是美国陆地卫星计划(Landsat)的第八颗卫星,于2013年2月11号在加利福尼亚范登堡空军基地由Atlas-V火箭搭载发射成功,最初称为“陆地卫星数据连续性任务”(Landsat Data Continuity Mission,LDCM)。Landsat 8上携带陆地成像仪(Operational Land Imager ,OLI)和热红外传感器(Thermal Infrared Sensor,TIRS)。

Landsat8 各波段介绍

选取条带号202,行列号60地区的2018年6月29日获 取的图像。通过读取Landsat8 OLI的432波段信息并将这三个波段写入同一个文件中,得到432波段合成的真彩色图像。

对于GDAL数据集,有一下的一个基本结构。

GDAL数据集的基本结构。每个数据集包含一个或多个波段,又依次包含像素数据

import osfrom osgeo import gdalos.chdir(r'F:\作业\遥感地学分析\第一次作业')  # 切换当前工作路径band1_fn = 'LC08_L1TP_201024_20180629_20180716_01_T1_B4.TIF'band2_fn = 'LC08_L1TP_201024_20180629_20180716_01_T1_B3.TIF'band3_fn = 'LC08_L1TP_201024_20180629_20180716_01_T1_B2.TIF'in_ds = gdal.Open(band1_fn)in_band = in_ds.GetRasterBand(1)gtiff_driver = gdal.GetDriverByName('GTiff') # 使用gtiff的驱动创建tif格式的文件out_ds = gtiff_driver.Create('test.tiff',                              in_band.XSize, in_band.YSize, 3, in_band.DataType) # 创建一个新的3通道数据集对象,像素值大小由原本波段提供out_ds.SetProjection(in_ds.GetProjection()) # 获取需要导入报端数据的投影信息out_ds.SetGeoTransform(in_ds.GetGeoTransform()) # 获取需要导入波段数据的geotransform信息for i, z in zip([band1_fn,band2_fn,band3_fn], [1, 2, 3]): # 打开不同波段文件,并保存波段信息     in_ds = gdal.Open(i)     in_band = in_ds.GetRasterBand(1)     in_data = in_band.ReadAsArray()     out_band = out_ds.GetRasterBand(z)     out_band.WriteArray(in_data)     print('Band%s is done' % z)out_ds.FlushCache() # 清除缓存for i in range(1, 4): # 配置金字塔     out_ds.GetRasterBand(i).ComputeStatistics(False)out_ds.BuildOverviews('average', [2, 4, 8, 16, 32])

这里做的事主要是导入gdal模块。然后设置当前的路径,并且制定Landsat波段对应的文件。通过给gdal.Open函数传递文件名,然后打开geotiff所包含的第一个波段,获取了数据集中第一个波段的句柄(注意GetRasterBand波段数从1开始)。

接着是传递一个新的数据集将像素数据复制并放入。因此需要使用到上面提到的创建驱动对象的函数。之后从输入的数据集中得到投影并复制到新数据集,接着对geotransform做同样的操作。

创建数据集之后,进行添加像素值。通过ReadAsArray得到波段像素值,然后通过指定out_ds需要放入的波段位置,使用WriteArray将像素值复制到新的波段。

使用envi打开图像得到如下结果:

可以看到合成效果基本是真彩色的样子(这里其实可以用python可视化tiff的,但是拉伸函数过长摸了以后再写,over)

c#写图像tif gdal_Gdal系列 (二)读取图像基本操作b + 简单波段合成相关推荐

  1. Kafka与Spark集成系列二Spark的安装及简单应用

    原 [Kafka与Spark集成系列二] Spark的安装及简单应用https://blog.csdn.net/u013256816/article/details/82082019版权声明:本文为博 ...

  2. (二)Landsat_5 TM 遥感影像波段合成真假彩色影像

    前言 回顾以下Landsat系列卫星的发展史,可以发现Landsat_5卫星已经退役,作为世界上寿命最长的地球观测卫星,其在影像方面对人类的发展具有很深刻的意义.Landsat_5 TM共有7个波段, ...

  3. matlab显示YCrCb的图像,【Matlab系列】读取并显示YUV视频文件

    Date: 2019-5-12 1.读取并显示YUV视频文件Matlab代码 %% 1.读取视频内容并显示 fid = fopen('akiyo_cif.yuv','r'); %读入YUV文件 row ...

  4. [Kafka与Spark集成系列二] Spark的安装及简单应用

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  5. STM32CubeMx + LWIP(实现UDP组播/MQTT/热插拔)系列 二 ----- CubeMx生成文件的简单介绍与热插拔

    CubeMx生成的文件主要是两个文件,lwipopts.h和ethnetif.c. lwipopts.h主要是对于lwip中一些宏的定义的选择.该文件include在lwip的opt.h文件前面.因此 ...

  6. matlab 对三维图像旋转,求助,二维图像如何绕轴旋转成为三维图像

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 程序如下 gama = 2*pi/9; h = 300; Rr = 400; Dr = 850; R1 = h/(2*sin(gama/2)); thet ...

  7. cv2.imread读取图像结果none_keras遥感图像Unet语义分割(支持多波段amp;多类)

    前言 网上其实有好多unet的教程,但是大多不支持多波段(遥感图像除了RGB波段还有红外等其他波段),多类别的话标签做onehot编码的时候类别颜色要手动输入.针对这两个问题,今天写下这篇文字. 有问 ...

  8. 二维图像的傅立叶变换

    摘要:二维图像的傅立叶变换,与一维傅立叶相比,在理解上要抽象很多.我在网上找了几篇相对较好的文章,并用matlab自己做了几个实验图像,希望能对大家理解二维图像的傅立叶变换有所帮助. 关键字:二维傅立 ...

  9. 读取图像,显示图像,输出图像像素矩阵

    方法一:使用matplotlib import matplotlib import matplotlib.pyplot as plt #显示图像 from matplotlib.image impor ...

最新文章

  1. Servlet--02--xml文件配置
  2. SAP 4.6C升级ECC6.0 WS_QUERY 的改法
  3. 自定义滚动条CSS样式
  4. realloc函数使用总结
  5. 一文快速掌握IPv6基础知识及使用指南
  6. 那些从小不干活的人,不做家务,不做饭的人后来怎么样了呀?
  7. VScode设置console.log('')快捷键
  8. 第四章:FLASK结构拆分和循环引入问题
  9. pythonweb项目源码下载_最新Python WEB开发在线教育项目之谷粒教育 软件源码齐全...
  10. wpf demo (gif , multithredading,httpwatch)
  11. 如何安装biopython_Biopython - 安装
  12. 安装无人值守称重系统费用
  13. 微信小程序退出功能(退回到微信)
  14. 常见互联网34个术语解释
  15. Mozilla 考虑从 Firefox 剥离 XUL 和 XBL
  16. python股票回测源码_Python爬虫回测股票的实例讲解
  17. jkd环境安装脚本(jdk-8u201-linux-x64.tar.gz)
  18. 网络管理软件都有哪些,目前好用的网络管理软件
  19. 全面解读惯性导航系统与技术
  20. 迅雷链总工程师来鑫:在解决了区块链应用四大问题后,迅雷链今年将在密码领域为行业贡献...

热门文章

  1. iOS Programming UIWebView 2
  2. ubuntu下的eclipse 3.3初用aptana报SWT错误
  3. MAC安装influxdb和grafana
  4. 动态规划——乘积为正数的最长子数组长度(Leetcode 1567)
  5. Oracle BCT(Block Change Tracking)与增量备份
  6. 【华为云技术分享】华为专家亲述:如何转型搞 AI?
  7. 【华为云技术分享】如何使用pyCharm与ModelArts公有云服务联动开发,快速且充分地利用云端GPU计算资源
  8. embedding在推荐系统中的应用总结,这些你知道吗?
  9. 【华为云技术分享】云小课 | 灵活配置权限,满足存储安全(OBS权限管理介绍上篇)
  10. 有了它,从此走上炫酷的编码之路!