9.2 栅格图层符号化单波段灰度渲染

news2024/11/15 9:08:12

文章目录

  • 前言
  • 单波段灰度
    • QGis设置为单波段灰度
    • 二次开发代码实现单波段灰度
  • 总结

前言

  • 介绍栅格图层数据渲染之单波段灰度显示
  • 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps

单波段灰度

  • 以“3420C_2010_327_RGB_LATLNG.tif”数据为例,在QGis中加载默认显示如下图
    在这里插入图片描述

QGis设置为单波段灰度

  • 在图层属性的“Symbology”选项卡中选择“Render type”为“Singleband gray”,如图所示
    在这里插入图片描述
  • 在“Gray band”中选择需要渲染的波段;在“Color gradient”中选择渐变方向,包括从黑色到白色(Black to white)和从白色到黑色(White to Black)两种方式。
  • 在“Contrast enhancement”中选择对比度增强方法,包括无增强(No enhancement)、拉伸到最小值和最大值之间的范围(Stretch to MinMax)、拉伸并裁剪到最小值和最大值之间的范围(Stretch and clip to MinMax)、裁剪到最小值和最大值之间的范围(Clip to MinMax)。经过裁剪后,超出范围的像元将不显示在地图画布上;反之,则显示为黑色或白色。
  • 在“Min”和“Max”中输入渐变区域的最小值和最大值,或者通过“Min / Max ValueSettings”中的四个选项进行自动设置。
    • User defined:用户自定义最大值和最小值。
    • Cumulative count Cut:按照数值从小到大排列,仅保留一定百分比内的数值,去除可能存在的异常值。
    • Min / max:设置为波段内数值的最小值或最大值。
    • Mean +/- standard deviation:取平均值左右两侧一个标准差范围内的数值,以及μ- σ与μ+σ之间的数值(μ表示平均值,σ表示标准差)。
    • 在“Statistics extent”中选择上述设置的统计范围,包括整个影像(Whole raster)、当前范围(Current canvas)和随范围变化(Updated canvas)。随范围变化指当用户改变地图范围时,栅格数据渲染的最大值和最小值也随之变化。
    • 在“Accuracy”中选择最大值和最小值的计算精度,包括估计(较快)[Estimate (faster)]和精确(较慢)[Actual (slower)]两种。
  • “Layer Rendering”选项区域设置显示效果,包括混合模式(Blending mode)、亮度(Brightness)、对比度(Contrast)、饱和度(Saturation)、灰阶(Grayscale)等。
  • 在“Resampling”选项区域可以设置显示效果的重采样方法,包括上采样(放大地图时插值数据)和下采样(缩小地图时抽取数据)两种。上采样(Zoom in)包括最邻近法(Nearest neighbour)、双线性法(Bilinear)和三次立方法(Cubic);下采样(Zoom out)包括最邻近法(Nearest neighbour)和平均值法(Average)。另外,还可以在“Oversampling”中选择过采样系数(默认为2,使用最邻近法时无效)。通常,默认的最邻近法渲染速度最快,但是使用双线性法(Bilinear)和三次立方法(Cubic)时渲染效果更好。
  • 属性设置完成后,图层渲染效果如下图
    在这里插入图片描述

二次开发代码实现单波段灰度

  • QgsSingleBandGrayRenderer是单波段灰度渲染器,详情见文档,类图如下
    在这里插入图片描述
  • 其构造函数有两个参数:QgsSingleBandGrayRenderer( QgsRasterInterface *input, int grayBand );,分别传入dataProvider和波段序号,代码如下
    const int grayBand = 1;
    QgsSingleBandGrayRenderer *renderer = new QgsSingleBandGrayRenderer( layer->dataProvider(), grayBand );
  • 调用类的成员函数setters,如void setGradient( Gradient gradient )设置参数,代码如下
    renderer->setGradient(QgsSingleBandGrayRenderer::BlackToWhite);//
    QgsContrastEnhancement *ce = new QgsContrastEnhancement( ( Qgis::DataType )(layer->dataProvider()->dataType( grayBand ) ) );
    ce->setContrastEnhancementAlgorithm(QgsContrastEnhancement::StretchToMinimumMaximum);
    ce->setMinimumValue(-1);
    ce->setMaximumValue(2630);
    renderer->setContrastEnhancement(ce);
    QgsRasterMinMaxOrigin mmOrigin = renderer->minMaxOrigin();
    renderer->setMinMaxOrigin(mmOrigin);
    //QgsRasterLayer中有Layer Rendering和Resampling中的相应设置
  • 最后设置图层的渲染器即可
  • 完整测试代码如下
void MainWindow::rasterSinglebandGraySlot()
{
    //添加测试图层
    QgsRasterLayer *layer = addTestRaster("maps/raster/3420C_2010_327_RGB_LATLNG.tif");
    //
    const int grayBand = 1;
    QgsSingleBandGrayRenderer *renderer = new QgsSingleBandGrayRenderer( layer->dataProvider(), grayBand );
    renderer->setGradient(QgsSingleBandGrayRenderer::BlackToWhite);//
    QgsContrastEnhancement *ce = new QgsContrastEnhancement( ( Qgis::DataType )(layer->dataProvider()->dataType( grayBand ) ) );
    ce->setContrastEnhancementAlgorithm(QgsContrastEnhancement::StretchToMinimumMaximum);
    ce->setMinimumValue(-1);
    ce->setMaximumValue(2630);
    renderer->setContrastEnhancement(ce);
    QgsRasterMinMaxOrigin mmOrigin = renderer->minMaxOrigin();
    renderer->setMinMaxOrigin(mmOrigin);
    //QgsRasterLayer中有Layer Rendering和Resampling中的相应设置

    layer->setRenderer(renderer);
}

  • 测试效果如下
    在这里插入图片描述
    在这里插入图片描述

总结

  • 介绍了栅格图层单波段灰度渲染的使用

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

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

相关文章

论坛系统--测试报告(部分)

前言 逆水行舟,不进则退!!! 目录 项目背景 接口测试 性能测试 压力测试 UI测试 项目背景 项目名称: 论坛系统 项目概述: 论坛系统是一个基于Spring Boot和MySQL的Web应用程序…

Nginx理论篇与相关网络协议

Nginx是什么? Nginx是一款由C语言编写的高性能、轻量级的web服务器,一个线程能处理多个请求,支持万级并发。 优势:I/O多路复用。 I/O是什么? I指的是输入(Input),O是指输出(Outp…

poi-tl、aspose实现word中表在每页携带表头表尾

实现word中表在每页携带表头表尾(第一版) word中的表格如果只有一页时表头表尾都很好处理,当中间内容足够多时,表尾只会出现在最后一页,表头也只会出现在第一页,之前想过用word自带的页眉页尾来处理但是&a…

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构③ | 4.6

前言 第4章对应的内容选择题和案例分析都会进行考查,这一章节属于技术相关的内容,学习要以教材为准。本章分值预计在4-5分。 目录 4.6 网络架构 4.6.1 基本原则 4.6.2 局域网架构 4.6.3 广域网架构 4.6.4 移动通信网架构 4.6.5 软件定义网络 4.6…

云动态摘要 2024-07-09

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起! [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造&…

【面试】高频面试点:从源码角度一篇文章带你搞懂128陷阱!

要理解什么是“128陷阱”,首先来看一段代码: public static void main(String... strings) {Integer integer1 3;Integer integer2 3;if (integer1 integer2)System.out.println("integer1 integer2");elseSystem.out.println("inte…

07-7.3.2 平衡二叉树(AVL)

👋 Hi, I’m Beast Cheng 👀 I’m interested in photography, hiking, landscape… 🌱 I’m currently learning python, javascript, kotlin… 📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

【Linux】:服务器用户的登陆、删除、密码修改

用Xshell登录云服务器。 1.登录云服务器 先打开Xshell。弹出的界面点。 在终端上输入命令ssh usernameip_address,其中username为要登录的用户名,ip_address为Linux系统的IP地址或主机名。 然后输入密码进行登录。 具体如下: 找到新建会话…

提高项目效率必备:探索2024年10大最佳需求管理系统

本文将分享2024年10款高效需求管理工具:PingCode、Worktile、Tapd、禅道、Teambition、ClickUp、Tower、Asana、Jira 和 monday.com。 在快速变化的软件开发环境中,选择合适的需求管理工具变得至关重要。项目失败往往源于需求不明确或管理不善&#xff0…

linux权限深度解析——探索原理

前言:本节内容主要讲述的是linux权限相关的内容, linux的权限如果使用root账号是感受不到的, 所以我们要使用普通账号对本节相关内容进行学习,以及一些实验的测试。 然后, 通过linux权限的学习我们可以知道为什么有时候…

记一次 .NET某酒业业务系统 崩溃分析

一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序每次关闭时就会自动崩溃,一直找不到原因让我帮忙看一下怎么回事,这位朋友应该是第二次找我了,分析了下 dump 还是挺经典的,拿出来给大家分享一下吧。 …

成都欣丰洪泰文化传媒有限公司电商服务领航者

在当今数字化浪潮中,电商行业正以前所未有的速度蓬勃发展。作为这片蓝海中的佼佼者,成都欣丰洪泰文化传媒有限公司凭借其专业的电商服务能力和对市场的敏锐洞察力,成为众多品牌信赖的合作伙伴。今天,就让我们一起走进成都欣丰洪泰…

大屏自适应容器组件 v-scale-screen

在vue中,v-scale-screen可用于大屏项目开发,实现屏幕自适应,可根据宽度自适应,高度自适应,和宽高等比例自适应,全屏自适应。 仓库地址:github国内地址:gitee 一、安装 npm instal…

Mysql中存储引擎简介、修改、查询、选择

场景 数据库存储引擎 数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS )使用数据引擎进行创建、查询、更新和删除数据的操作。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以…

【C++ 】-vector:新时代动态数组的革新与未来

目录 1. vector的介绍及使用 1.1 vector的介绍 1.1.1 vector是什么 1.1.2 vector的存储机制 1.2 vector的使用 1.2.1 定义和构造函数 1.2.2 迭代器 1.2.3 容量相关操作 1.2.4 元素访问和修改 1.3 迭代器失效问题 2. vector深度剖析及模拟实现 2.1 std::vector的模拟…

【笔记】finalshell中使用nano编辑器GNU

ctrl O 保存 enter 确定 ctrl X 退出 nano编辑 能不用就不用吧 因为我真用不习惯 nano编辑的文件也可以用vim编辑的

网页提示“非私密连接”怎么办?

当网页提示“非私密连接”或“您与该网站的连接不是私密连接”,这通常意味着浏览器无法建立一个安全的HTTPS连接。HTTPS协议是HTTP协议的安全版本,通过SSL协议加密数据传输,以保护用户的数据免受中间人攻击或监听。主要有下面几个原因&#x…

In Search of Lost Online Test-time Adaptation: A Survey--论文笔记

论文笔记 资料 1.代码地址 https://github.com/jo-wang/otta_vit_survey 2.论文地址 https://arxiv.org/abs/2310.20199 3.数据集地址 1论文摘要的翻译 本文介绍了在线测试时间适应(online test-time adaptation,OTTA)的全面调查,OTTA是一种专注于使机器学习…

Apache配置与应用(优化apache)

Apache配置解析(配置优化) Apache链接保持 KeepAlive:决定是否打开连接保持功能,后面接 OFF 表示关闭,接 ON 表示打开 KeepAliveTimeout:表示一次连接多次请求之间的最大间隔时间,即两次请求之间…

一.5 高速缓存至关重要

这个简单的示例揭示了一个重要的问题,即系统花费了大量的时间把信息从一个地方挪到另一个地方。hello程序的机器指令最初是存放在硬盘上,当程序加载时,它们被复制到主存;当处理器运行程序时,指令又从主存复制到处理器。…