本文介绍基于Python语言中的gdal模块,读取一景.tif格式的栅格遥感影像文件,提取其中每一个像元的像素数值,对像素值加以计算(辐射定标)后,再以一列数据的形式将计算后的各像元像素数据保存在一个.csv格式文件中的方法。

  首先,我们明确一下本文的需求。现在有一个栅格遥感影像文件,其为.tiff格式的文件(但其实和.tif格式文件的操作方法是一样的),且像元的数值都是真实数值乘上10000之后的。这一遥感影像如下图所示,可以看到其各个波段的像元像素数据都是几百、几千的范围。

  我们现在希望,对于这一景遥感影像的第一个波段(如果大家需要对多个波段加以这一操作,那么就在本文的代码中加以循环,分别对多个波段依次加以同样的处理就好),提取出其中每一个像元的数值;随后对提取出来的数据加以辐射定标,即除以10000,并将结果保存在一个.csv格式文件中,且以一列的形式来保存。这里本文之所以需要用多行一列而非多行多列矩阵格式来存放数据,是因为后面需要将这些像素数据当作神经网络的预测样本,即一行表示一个样本,所以就需要保存为多行一列;如果大家需要保存为多行多列矩阵格式,那代码的思路还是一致的,就是在导出数据之前将其保存为二维矩阵格式的变量就好。

  知道了需求,我们就可以开始代码的撰写;具体代码如下。

# -*- coding: utf-8 -*-
"""
Created on Wed Nov 29 01:32:28 2023 @author: fkxxgis
""" import csv
from osgeo import gdal file_path = "E:/04_Reconstruction/05_Image_Test/GF1WFV4.16m.2021252035621.48STB.000000_SR.tiff"
dataset = gdal.Open(file_path, gdal.GA_ReadOnly) band = dataset.GetRasterBand(1)
data = band.ReadAsArray()
dataset = None data = data * 0.0001
data_one_column = data.flatten() csv_file = "E:/04_Reconstruction/05_Image_Test/column_1.csv"
with open(csv_file, 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow(["Value"])
writer.writerows([[value] for value in data_one_column])

  其中,我们首先导入所需的库。在这里,csv库用于处理.csv格式文件,gdal库(从osgeo模块中导入)则用于读取和处理遥感影像文件;随后,定义遥感影像文件路径——file_path用来指定要读取的遥感影像文件的路径。

  接下来,我们打开遥感影像文件。dataset = gdal.Open(file_path, gdal.GA_ReadOnly)意味着我们以只读方式打开遥感影像文件,并将返回的Dataset对象赋值给变量dataset;随后,获取第一个波段的像元值,这可以通过band = dataset.GetRasterBand(1)来完成(需要注意,这里波段编号的索引是从1开始的);随后,data = band.ReadAsArray()意思是将波段的像元值读取为一个二维数组,并将结果赋值给变量data。随后,我们需要关闭遥感影像文件,通过将dataset变量设为None,释放对遥感影像文件的引用,从而关闭文件。

  其次,我们对像元值进行处理。首先,完成辐射定标,也就是通过data = data * 0.0001将像元值乘以0.0001;随后,将处理后的像元值按列展平——在这里,data_one_column = data.flatten()表示我们使用flatten()方法将二维数组展平为一维数组,并将结果赋值给变量data_one_column

  最后,将上述处理好的数据写入.csv格式文件。其中,csv_file指定要写入的.csv格式文件的路径;with open(csv_file, 'w', newline='') as file表示我们使用open()函数打开.csv格式文件,并创建一个csv.writer对象,同时指定文件的写入模式为覆盖写入'w'writer.writerow(["Value"])意味着我们写入.csv格式文件的第一行,即表头,这里是一个标题为Value的列;最后,writer.writerows([[value] for value in data_one_column])通过迭代data_one_column中的每个值,并将其作为单独的列表传递给writer.writerows()方法,从而将每个值写入.csv格式文件的一行中。

  运行上述代码,即可得到如下图所示的结果.csv格式文件。

  其中,第一行就是我们的列名;后面几行数据都是0,这是由于原本的遥感影像在左上角区域NoData值(大家看我们本文的第一张图就能看到)导致的。如果往下继续拖动这个.csv格式文件,就会看到处理后的非0数据了。

  至此,大功告成。

Python读取栅格图像并对像元数据处理后导出到表格文件中的更多相关文章

  1. IO流的练习5 —— 读取文件中的字符串,排序后写入另一文件中

    需求:已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” 请编写程序读取数据内容,把数据排序后写入ss.txt中. 分析: A:读取文件中的数据 B:把数 ...

  2. python 网络爬虫(二) BFS不断抓URL并放到文件中

    上一篇的python 网络爬虫(一) 简单demo 还不能叫爬虫,只能说基础吧,因为它没有自动化抓链接的功能. 本篇追加如下功能: [1]广度优先搜索不断抓URL,直到队列为空 [2]把所有的URL写 ...

  3. python 批量修改预定字符串并将修改后的字符串插入文件指定位置

    下面的例子是在文件的指定位置增加指定字符串的例子 修改配置文件: def add_str(pre_str): lines = [] flag = True f = open("z.txt&q ...

  4. 从二进制数据流中构造GDAL可以读取的图像数据

    在很多时候,我们的图像数据往往都不是文件方式存储在磁盘上,而是可能从网络或者数据库中获取的是二进制的图像数据流.最简单的方式和最容易想到的方式就是将这个文件流保存到磁盘上形成一个文件,然后再使用GDA ...

  5. Python自动化测试框架——数据驱动(从文件中读取)

    学过编程的伙伴们都知道,数据不仅可以从代码中读取,还可以从文件中读取. 今天小编就简要的介绍一下从文件中读取数据,并应用到自动化测试中方法. 先来展示下接下来将要用到的文件在项目中的结构 从txt文件 ...

  6. 归纳从文件中读取数据的六种方法-JAVA IO基础总结第2篇

    在上一篇文章中,我为大家介绍了<5种创建文件并写入文件数据的方法>,本节我们为大家来介绍6种从文件中读取数据的方法. 另外为了方便大家理解,我为这一篇文章录制了对应的视频:总结java从文 ...

  7. Jmeter实现从csv文件中随机读取数据

    一.需求 参数放在csv文件中,文件格式如下,需求每次从文件中随机读取一行数据. 二.步骤 1.在csv文件中新增加一列,pl 2.新增一个配置原件-随机数,设置如下: 50是文件数据的行数 3.新增 ...

  8. python将字典列表导出为Excel文件的方法

    将如下的字典列表内容导出为Excel表格文件形式: ​ 关于上图字典列表的写入,请参考文章:https://blog.csdn.net/weixin_39082390/article/details/ ...

  9. Python ArcPy批量拼接长时间序列栅格图像

      本文介绍基于Python中ArcPy模块,对大量不同时相的栅格遥感影像按照其成像时间依次执行批量拼接的方法.   在前期的文章Python arcpy创建栅格.批量拼接栅格中,我们介绍了利用Pyt ...

  10. json数据处理:读取文件中的json字符串,转为python字典

    方法1: 读取文件中的json字符串, 再用json.loads转为python字典 import json str_file = './960x540/config.json' with open( ...

随机推荐

  1. 手撸二叉树——AVL平衡二叉树

    还记得上一篇中我们遗留的问题吗?我们再简要回顾一下,现在有一颗空的二叉查找树,我们分别插入1,2,3,4,5,五个节点,那么得到的树是什么样子呢?这个不难想象,二叉树如下: 树的高度是4,并且数据结构 ...

  2. vi指令总结

    VI常用技巧 ​ VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势,并会逐 ...

  3. 一文彻底弄懂并解决Redis的缓存雪崩,缓存击穿,缓存穿透

    缓存雪崩.缓存击穿.缓存穿透是分布式系统中使用缓存时,常遇到的三类问题,都会对系统性能和稳定性产生严重影响.下面将详细介绍这三者的定义.产生原因.危害以及常见的解决方案. 1. 缓存雪崩 1.1 定义 ...

  4. Redhat 7.6安装11G RAC GI时遇到此类报错

    环境:Redhat Linux 7.6 + Oracle 11.2.0.4 RAC 现象:图像化安装过程中,按照提示执行root.sh脚本,报错中断. 1. 具体现象 2. 定位问题 3. 解决问题 ...

  5. IDEA久违了!FeignX插件支持方法级别的导航跳转

    > 需求调研:发现身边的同事追踪业务代码的时候,如果遇见feign接口,大家都是通过全局搜url进一步找到远程服务的实现.一旦项目大起来,路径变得复杂甚至重名之后,这将会是灾难. 市面上并没有很 ...

  6. ROS中无法定位软件包问题

    ROS 和ubuntu版本对应关系

  7. SpringBoot学习 _02 _配置单数据源(1)

    SpringBoot学习 _02 _配置单数据源(1) 1.通过IDEA创建SpringBoot项目 直接到选择依赖这一步,选择如图所示的 五个依赖即可 2.配置文件的编写 此处说明一下,这个数据库连 ...

  8. CAD Plus 移动端使用帮助

    Mac端使用帮助 English help 如果您有疑问或需要帮助请发送邮件至 3167292926@qq.com 1. 权限要求 1.1 获取位置信息 使用文件管理功能时显示网络信息需要获取位置信息 ...

  9. Python:pygame游戏编程之旅一(Hello World)

    按照上周计划,今天开始学习pygame,学习资料为http://www.pygame.org/docs/,学习的程序实例为pygame模块自带程序,会在程序中根据自己的理解加入详细注释,并对关键概念做 ...

  10. python模块之sqlite3

    在Python中操作sqlite3 1)基本使用 import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() ...