Python遥感图像处理指南(6)-绘制散点图和输出PDF报告

        今天我们来学习一些其他技能,在写论文时通常需要将结果图表进行整理,拼接图片很不方便,我们可以借助Pyhton将处理的图片和图标整合到PDF中输出,提高生产效率。

1、环境安装

安装PyPDF2 包

pip install PyPDF2

2、创建PDF

        我们将改造之前写的load_landsat_image 方法,来实现PDF文件的创建。整个图像对于 PDF 文件来说太大,为了保持长宽比不变,我们将只接收宽度作为参数,然后计算相应的高度,并将其传递给 rasterio 的读取函数,使用 create_rgb 函数创建 RGB 图像。请注意,我们会剪切大于 1 的值,因为我们需要 [0...1] 之间的值,以避免之后创建 PDF 时出现问题。创建 RGB 图像后,我们将不使用 plt.imshow 显示图像,而是直接使用 plt.imsave 将其保存为 .PDF 文件。

import rasterio
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as npdef load_landsat_image(img_folder, bands, width=None):# initialize the dictionariesimage = {}ds = {}path = Path(img_folder)# adjust the out_shapeif width is not None:out_shape = (int(width/7601 * 7761), width)print(f'Using output shape ({out_shape})')else:out_shape = None# loop through the given bands to loadfor band in bands:# considering the landsat images end with *_SR_B#.TIF, we will use it to locate the correct filefile = next(path.glob(f'*{band}.tif'))print(f'Opening file {file}')ds.update({band: rasterio.open(file)})image.update({band: ds[band].read(1, out_shape=out_shape)})return image, dsdef create_rgb(img, b_r, b_g, b_b, alpha=1.):rgb = np.stack([img[b_r], img[b_g], img[b_b]], axis=-1)rgb = rgb/rgb.max() * alpha# clip values outside the boundariesrgb[rgb>1] = 1rgb[rgb<0] = 0return rgb# load the image
img, image_ds = load_landsat_image('D:/Images/Input/Landsat/LC08_L2SP_231062_20201026_20201106_02_T1/', ['B2', 'B3', 'B4', 'B5', 'QA_PIXEL'], width=1000)# create the RGB for the image
rgb = create_rgb(img, 'B4', 'B3', 'B2', alpha=2.)plt.imsave('d:/temp/rgb.pdf', rgb)

3、创建包含掩膜图像的PDF

        在前面几章的学习中我们已经学到了云、阴影、水体的掩膜生产方法,现在将他们输出到PDF中

L8_flags = {'dilated_cloud': 1<<1,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/241642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins自动化部署之后端

准备工作参考本人另外几篇Jenkins相关的文章 新建任务 添加参数配置 字符串参数&#xff1a;分支名称 多选框&#xff1a;项目名称&#xff08;Extended Choice Parameter插件必备&#xff0c;插件安装参考我另外的文章&#xff09; 这个分割规则自定义。只要根据Jenkins…

【投稿】北海 - Rust与面向对象(二)

模板方法 Rust提供了trait&#xff0c;类似于面向对象的接口&#xff0c;不同的是&#xff0c;将传统面向对象的虚函数表从对象中分离出来&#xff0c;trait仍然是一个函数表&#xff0c;只不过是独立的&#xff0c;它的参数self指针可以指向任何实现了该trait的结构。 从对象中…

Go自定义PriorityQueue优先队列使用Heap堆

题目 分析 每次找最大的&#xff0c;pop出来 然后折半&#xff0c;再丢进去 go写法 go如果想用heap&#xff0c;要实现less\len\swap\push\pop 但可以偷懒&#xff0c;用sort.IntSlice,已经实现了less\len\swap 但由于目前是大根堆&#xff0c;要重写一下less 因此&#xff…

Maven依赖传递和依赖冲突

1 依赖传递 1.1 什么是依赖传递 现有Maven项目A、B、C&#xff0c;如果项目B依赖项目A&#xff0c;项目C依赖项目B&#xff0c;则可以认为项目C依赖项目A。这就是项目依赖的传递性。 此时项目C中会存在项目A和项目B中的所有依赖。 依赖传递的作用 简化依赖导入检测依赖版本…

懒加载图片案例

整体效果&#xff1a; HTML部分&#xff1a; <div class"lazy-box"><img class"lazy" data-original"img/1.jpg" alt"1.jpg" width"960" height"540"><img class"lazy" data-original…

用大白话举例子讲明白云计算

前几天王坚院士在2023云栖大会上发表了关于云计算的演讲&#xff0c;听得我是热血沸腾&#xff0c;王院士称AI和云计算的结合是“云计算的第三次浪潮”&#xff0c;对此我深表认同。但是身边的很多朋友还不知道云计算是什么意思&#xff0c;有些人还认为百度云和百度云盘是一个…

【RabbitMQ】RabbitMQ详解(二)

RabbitMQ详解 死信队列死信来源消息TTL过期队列达到最大长度消息被拒绝 RabbitMQ延迟队列TTL的两种设置队列设置TTL消息设置TTL 整合SrpingBoot队列TTL延时队列TTL优化Rabbtimq插件实现延迟队列 死信队列 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就…

测试:YAML OpenAPI(Swagger)

YAML YAML&#xff08;Yet Another Markup Language&#xff09;是一种数据序列化格式&#xff0c;通常被用来配置文件。它易于阅读&#xff0c;并且以数据结构为中心。YAML文件通常以.yaml或.yml为扩展名。 下面是一个YAML文件的简单示例&#xff1a;定义了一个人的基本信息…

Linux---基础操作命令

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…

GO语言基础笔记(三):复合类型

深入学习Go语言中的复合类型&#xff1a;数组、切片、映射&#xff08;Map&#xff09;和结构体。这些类型是构建复杂数据结构和实现复杂逻辑的基础。 目录 1. 数组&#xff08;Array&#xff09; 遍历数组 多维数组 数组作为函数参数 2. 切片&#xff08;Slice&#xff…

单片机的RTC获取网络时间

理解网络同步校准RTC的原理需要考虑NTP、SNTP、RTC这三个关键组件的作用和交互。下面详细解释这个过程&#xff1a; 1. NTP&#xff08;Network Time Protocol&#xff09;&#xff1a; 协议目的&#xff1a;NTP是用于同步计算机和设备时钟的协议。它通过在网络上与时间服务器通…

Java中Collections详解

Java中Collections详解 在Java中&#xff0c;java.util.Collections 是一个实用类&#xff0c;提供了各种静态方法&#xff0c;用于对集合进行操作和控制。这个类包含了许多有用的方法&#xff0c;用于对集合进行排序、查找、替换等操作。以下是一些 Collections 类中常用方法…

JUC AQS ReentrantLock源码分析

AQS java.util.concurrent.locks.AbstractQueuedSynchronizer AQS &#xff08;抽象队列同步器&#xff09;&#xff1a; AbstractQueuedSynchronizer 是什么 来自jdk1.5&#xff0c;是用来实现锁或者其他同步器组件的公共基础部分的抽象实现&#xff0c;是重量级基础框架以及…

前端性能优化十八:减少浏览器的回流和重绘

1. css: ①. 避免过多样式嵌套:a. 尽量让浏览器一次性找到样式.②. 避免使用css表达式:a. 在每次css绘制的过程中都是会执行.③. 使用绝对定位可以让动画元素脱离文档流:a. 给动画元素做单独定位④. 避免使用table布局:a. 会引起浏览器多次重绘⑤. 尽量不适用float布局:a. 可以…

【MybatisPlus快速入门】(3)SpringBoot整合MybatisPlus 之 Lombok插件安装及MybatisPlus分页代码示例

目录 1.Lombok1.1 步骤1:添加lombok依赖 2.2 步骤2:安装Lombok的插件1.3 步骤3:模型类上添加注解2 分页功能2.1 步骤1:调用方法传入参数获取返回值2.2步骤2:设置分页拦截器2.3 步骤3:运行测试程序 之前我们已学习MyBatisPlus在代码示例与MyBatisPlus的简介&#xff0c;在这一节…

Golang make vs new

文章目录 1.简介2.区别3.new 可以初始化 slice&#xff0c;map 和 channel 吗&#xff1f;4.make 可以初始化其他类型吗&#xff1f;5.小结参考文献 1.简介 在 Go 语言中&#xff0c;make 和 new 是两个用于创建对象的内建函数&#xff0c;但它们有着不同的用途和适用范围。 …

DLLNotFoundException:xxx tolua... 错误打印

DLLNotFoundException:xxx tolua... 错误打印 一、DLLNotFoundException介绍二、Plugins文件夹文件目录结构如下&#xff1a; 三、Plugins中的Android文件夹四、Plugins中的IOS文件夹这里不说了没测试过不过原理应该也是选择对应的平台即可五、Plugins中的x86和X86_64文件夹 一…

浅学JWT跨域认证

Json Web令牌简称JWT JWT的使用 加入依赖 <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.3.0</version> </dependency> 测试案例 Test //生成token void jwtdemo01(){Calendar in…

【机器学习】模式识别

1 概述 模式识别&#xff0c;简单来讲&#xff0c;就是分类问题。 模式识别应用&#xff1a;医学影像分析、人脸识别、车牌识别、遥感图像 2 模式分类器 分类器的分类&#xff1a;线性分类器、非线性分类器、最近邻分类器 2.1 分类器的训练&#xff08;学习&#xff09;过…

Featured Based知识蒸馏及代码(3): Focal and Global Knowledge (FGD)

文章目录 1. 摘要2. Focal and Global 蒸馏的原理2.1 常规的feature based蒸馏算法2.2 Focal Distillation2.3 Global Distillation2.4 total loss3. 实验完整代码论文: htt