【GDAL-Python】1-在Python中使用GDAL读写栅格文件

2024-04-16 12:36
文章标签 python 使用 读写 栅格 gdal

本文主要是介绍【GDAL-Python】1-在Python中使用GDAL读写栅格文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1-概要
    • 2.代码实现

1-概要

提示:本教程介绍如何使用 Python 中的 GDAL 库将栅格数据读取为数组并将数组另存为GeoTiff 文件

视频地址:B站对应教程

目标:
(1)读写GeoTiff影像;
(2)正确显示单波段影像;
(3)学会制作掩膜影像用于提取影像中有用部分

2.代码实现

实现主要功能如下

  1. Geotiff文件读取并显示
  2. 数据操作-制作掩膜;
  3. 输出影像

(1)代码:Geotiff文件读取并显示

# -*- coding:utf-8 -*-
from osgeo import gdal
import numpy as np
import matplotlib.pyplot as plt
# 1.加载并显示影像 
ds = gdal.Open("dem.tif")# gdal.Dataset
gt = ds.GetGeoTransform()#地理变换:图像到地理坐标的变换矩阵
proj = ds.GetProjection()#投影信息band = ds.GetRasterBand(1)#查询波段数:ds.RasterCount
array = band.ReadAsArray()plt.figure()
plt.imshow(array)

(2)代码:数据操作-制作掩膜

# -*- coding:utf-8 -*-
from osgeo import gdal
import numpy as np
import matplotlib.pyplot as plt
# 1.加载并显示影像 
ds = gdal.Open("dem.tif")# gdal.Dataset
gt = ds.GetGeoTransform()#地理变换:图像到地理坐标的变换矩阵
proj = ds.GetProjection()#投影信息band = ds.GetRasterBand(1)#查询波段数:ds.RasterCount
array = band.ReadAsArray()# 2.数据操作:过滤高于数据平均值的值,
#高于的赋值为1,否则为0,组成了掩膜图像binmask
binmask = np.where((array  >= np.mean(array)),1,0)#制作二进制掩膜,用于提取影像
plt.figure()
plt.imshow(binmask)

(3)代码:输出影像

# -*- coding:utf-8 -*-
from osgeo import gdal
import numpy as np
import matplotlib.pyplot as plt
# 1.加载并显示影像 
ds = gdal.Open("dem.tif")# gdal.Dataset
gt = ds.GetGeoTransform()#地理变换:图像到地理坐标的变换矩阵
proj = ds.GetProjection()#投影信息band = ds.GetRasterBand(1)#查询波段数:ds.RasterCount
array = band.ReadAsArray()plt.figure()
plt.imshow(array)# 2.数据操作:过滤高于数据平均值的值,高于赋值为1,否则为0
binmask = np.where((array  >= np.mean(array)),1,0)#制作二进制掩膜,用于提取影像
plt.figure()
plt.imshow(binmask)#3.输出影像
driver = gdal.GetDriverByName("GTiff")
driver.Register()
outds = driver.Create("binmask.tif", xsize = binmask.shape[1],ysize = binmask.shape[0], bands = 1, eType = gdal.GDT_Int16)
outds.SetGeoTransform(gt)
outds.SetProjection(proj)
outband = outds.GetRasterBand(1)
outband.WriteArray(binmask)
outband.SetNoDataValue(np.nan)
outband.FlushCache()# 4.关闭数据和波段
outband = None
outds = No

这篇关于【GDAL-Python】1-在Python中使用GDAL读写栅格文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908818

相关文章

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum