c#写图像tif gdal_Gdal系列 (二)读取图像基本操作b + 简单波段合成
点击上方蓝字关注我们
“ 基本操作第二辑+简单波段合成。”
一.基本操作
通过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 + 简单波段合成相关推荐
- Kafka与Spark集成系列二Spark的安装及简单应用
原 [Kafka与Spark集成系列二] Spark的安装及简单应用https://blog.csdn.net/u013256816/article/details/82082019版权声明:本文为博 ...
- (二)Landsat_5 TM 遥感影像波段合成真假彩色影像
前言 回顾以下Landsat系列卫星的发展史,可以发现Landsat_5卫星已经退役,作为世界上寿命最长的地球观测卫星,其在影像方面对人类的发展具有很深刻的意义.Landsat_5 TM共有7个波段, ...
- matlab显示YCrCb的图像,【Matlab系列】读取并显示YUV视频文件
Date: 2019-5-12 1.读取并显示YUV视频文件Matlab代码 %% 1.读取视频内容并显示 fid = fopen('akiyo_cif.yuv','r'); %读入YUV文件 row ...
- [Kafka与Spark集成系列二] Spark的安装及简单应用
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- STM32CubeMx + LWIP(实现UDP组播/MQTT/热插拔)系列 二 ----- CubeMx生成文件的简单介绍与热插拔
CubeMx生成的文件主要是两个文件,lwipopts.h和ethnetif.c. lwipopts.h主要是对于lwip中一些宏的定义的选择.该文件include在lwip的opt.h文件前面.因此 ...
- matlab 对三维图像旋转,求助,二维图像如何绕轴旋转成为三维图像
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 程序如下 gama = 2*pi/9; h = 300; Rr = 400; Dr = 850; R1 = h/(2*sin(gama/2)); thet ...
- cv2.imread读取图像结果none_keras遥感图像Unet语义分割(支持多波段amp;多类)
前言 网上其实有好多unet的教程,但是大多不支持多波段(遥感图像除了RGB波段还有红外等其他波段),多类别的话标签做onehot编码的时候类别颜色要手动输入.针对这两个问题,今天写下这篇文字. 有问 ...
- 二维图像的傅立叶变换
摘要:二维图像的傅立叶变换,与一维傅立叶相比,在理解上要抽象很多.我在网上找了几篇相对较好的文章,并用matlab自己做了几个实验图像,希望能对大家理解二维图像的傅立叶变换有所帮助. 关键字:二维傅立 ...
- 读取图像,显示图像,输出图像像素矩阵
方法一:使用matplotlib import matplotlib import matplotlib.pyplot as plt #显示图像 from matplotlib.image impor ...
最新文章
- Servlet--02--xml文件配置
- SAP 4.6C升级ECC6.0 WS_QUERY 的改法
- 自定义滚动条CSS样式
- realloc函数使用总结
- 一文快速掌握IPv6基础知识及使用指南
- 那些从小不干活的人,不做家务,不做饭的人后来怎么样了呀?
- VScode设置console.log('')快捷键
- 第四章:FLASK结构拆分和循环引入问题
- pythonweb项目源码下载_最新Python WEB开发在线教育项目之谷粒教育 软件源码齐全...
- wpf demo (gif , multithredading,httpwatch)
- 如何安装biopython_Biopython - 安装
- 安装无人值守称重系统费用
- 微信小程序退出功能(退回到微信)
- 常见互联网34个术语解释
- Mozilla 考虑从 Firefox 剥离 XUL 和 XBL
- python股票回测源码_Python爬虫回测股票的实例讲解
- jkd环境安装脚本(jdk-8u201-linux-x64.tar.gz)
- 网络管理软件都有哪些,目前好用的网络管理软件
- 全面解读惯性导航系统与技术
- 迅雷链总工程师来鑫:在解决了区块链应用四大问题后,迅雷链今年将在密码领域为行业贡献...
热门文章
- iOS Programming UIWebView 2
- ubuntu下的eclipse 3.3初用aptana报SWT错误
- MAC安装influxdb和grafana
- 动态规划——乘积为正数的最长子数组长度(Leetcode 1567)
- Oracle BCT(Block Change Tracking)与增量备份
- 【华为云技术分享】华为专家亲述:如何转型搞 AI?
- 【华为云技术分享】如何使用pyCharm与ModelArts公有云服务联动开发,快速且充分地利用云端GPU计算资源
- embedding在推荐系统中的应用总结,这些你知道吗?
- 【华为云技术分享】云小课 | 灵活配置权限,满足存储安全(OBS权限管理介绍上篇)
- 有了它,从此走上炫酷的编码之路!