9.2 柵格圖層符號化單波段灰度渲染

文章目錄

  • 前言
  • 單波段灰度
    • 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.pswp.cn/web/42361.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42361.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42361.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

easy-poi實現動態列(標題)、多sheet導出excel

一個sheet動態導出、偽代碼&#xff0c;創建填充后的workbook對象 List<Map<String, Object>>list new ArrayList<Map<String, Object>>(); HashMap<String, Object> map new HashMap<>(); map.put("name", "小明")…

啟動完 kubelet 日志顯示 failed to get azure cloud in GetVolumeLimits, plugin.host: 1

查看 kubelet 日志組件命令 journalctl -xefu kubelet 文字描述問題 Jul 09 07:45:17 node01 kubelet[1344]: I0709 07:45:17.410786 1344 operation_generator.go:568] MountVolume.SetUp succeeded for volume "default-token-mfzqf" (UniqueName: "ku…

全光譜燈和普通led燈的區別?忠告行業三大隱患弊端!

隨著社會的迅猛發展和生活步伐的加速&#xff0c;科技產品層出不窮&#xff0c;其中全光譜燈作為書房的新寵&#xff0c;備受矚目。它是否真如其宣傳的那樣具有多重優勢&#xff0c;尤其是對那些格外注重視力健康的人群而言&#xff0c;全光譜燈是否會帶來潛在的健康風險&#…

【北京迅為】《i.MX8MM嵌入式Linux開發指南》-第一篇 嵌入式Linux入門篇-第十二章 Linux 權限管理

i.MX8MM處理器采用了先進的14LPCFinFET工藝&#xff0c;提供更快的速度和更高的電源效率;四核Cortex-A53&#xff0c;單核Cortex-M4&#xff0c;多達五個內核 &#xff0c;主頻高達1.8GHz&#xff0c;2G DDR4內存、8G EMMC存儲。千兆工業級以太網、MIPI-DSI、USB HOST、WIFI/BT…

Java基礎(十六):String的常用API

目錄 一、構造器方法二、String與字節數組的轉換&#xff08;編碼與解碼&#xff09;1、字符串 --> 字節數組&#xff1a;&#xff08;編碼&#xff09;2、字節數組 --> 字符串&#xff1a;&#xff08;解碼&#xff09;3、iso-8859-1的特殊用法4、byte數組的數字表示 三…

Java版Flink使用指南——從RabbitMQ中隊列中接入消息流

大綱 創建RabbitMQ隊列新建工程新增依賴編碼設置數據源配置讀取、處理數據完整代碼 打包、上傳和運行任務測試 工程代碼 在《Java版Flink使用指南——安裝Flink和使用IntelliJ制作任務包》一文中&#xff0c;我們完成了第一個小型Demo的編寫。例子中的數據是代碼預先指定的。而…

判斷對象能否回收的兩種方法,以及JVM引用

判斷對象能否回收的兩種方法&#xff1a;引用計數算法&#xff0c;可達性分析算法 引用計數算法&#xff1a;給對象添加一個引用計數器&#xff0c;當該對象被其它對象引用時計數加一&#xff0c;引用失效時計數減一&#xff0c;計數為0時&#xff0c;可以回收。 特點&#xf…

自動駕駛SLAM又一開源巔峰之作!深挖時間一致性,精準構建超清地圖

論文標題&#xff1a; DTCLMapper: Dual Temporal Consistent Learning for Vectorized HD Map Construction 論文作者&#xff1a; Siyu Li, Jiacheng Lin, Hao Shi, Jiaming Zhang, Song Wang, You Yao, Zhiyong Li, Kailun Yang 導讀&#xff1a; 本文介紹了一種用于自動…

突發!馬斯克3140億參數Grok開源!Grok原理大公開!

BIG NEWS: 全球最大開源大模型&#xff01;馬斯克Grok-1參數量3410億&#xff0c;正式開源!!! 說到做到&#xff0c;馬斯克xAI的Grok&#xff0c;果然如期開源了&#xff01; 就在剛剛&#xff0c;馬斯克的AI創企xAI正式發布了此前備受期待大模型Grok-1&#xff0c;其參數量達…

硅紀元視角 | 虛擬神經科學的突破:AI「賽博老鼠」誕生

在數字化浪潮的推動下&#xff0c;人工智能&#xff08;AI&#xff09;正成為塑造未來的關鍵力量。硅紀元視角欄目緊跟AI科技的最新發展&#xff0c;捕捉行業動態&#xff1b;提供深入的新聞解讀&#xff0c;助您洞悉技術背后的邏輯&#xff1b;匯聚行業專家的見解&#xff0c;…

企業需要什么樣的MES?

MES&#xff08;英文全稱&#xff1a;Manufacturing Execution System&#xff09;&#xff0c;即制造執行系統&#xff0c;是面向車間生產的管理系統。它位于上層計劃管理系統&#xff08;如ERP&#xff09;與底層工業控制&#xff08;如PCS層&#xff09;之間&#xff0c;是制…

【Linux】:服務器用戶的登陸、刪除、密碼修改

用Xshell登錄云服務器。 1.登錄云服務器 先打開Xshell。彈出的界面點。 在終端上輸入命令ssh usernameip_address&#xff0c;其中username為要登錄的用戶名&#xff0c;ip_address為Linux系統的IP地址或主機名。 然后輸入密碼進行登錄。 具體如下&#xff1a; 找到新建會話…

Windows與time.windows.com同步time出錯(手把手操作)

今天我來針對Windows講解Time同步 時間問題 計算機的時間不同&#xff0c;過快或者過慢。&#xff08;可以和自己的手機時間進行對比&#xff0c;手機的時間進行同步的頻率會比計算機更快&#xff0c;因此更精準&#xff09;計算機time過快和過慢&#xff0c;會導致使用過程中…

想實現隨時隨地遠程訪問?解析可道云teamOS內網穿透功能

在數字化時代&#xff0c;無論是個人還是企業&#xff0c;都面臨著數據共享與遠程訪問的迫切需求。 比如我有時會需要在家中加班&#xff0c;急需訪問公司內網中的某個關鍵文件。 然而&#xff0c;由于公網與內網的天然隔閡&#xff0c;這些需求往往難以實現。這時&#xff0c…

代碼隨想錄 鏈表章節總結

移除鏈表元素 && 設計鏈表 學會設置虛擬頭結點 翻轉鏈表 leetcode 206 https://leetcode.cn/problems/reverse-linked-list/description/ 方法一&#xff1a;非遞歸新開鏈表 頭插法&#xff1a;創建一個新的鏈表&#xff0c;遍歷舊鏈表&#xff0c;按順序在新鏈表使…

AIGC | 在機器學習工作站安裝NVIDIA CUDA? 并行計算平臺和編程模型

[ 知識是人生的燈塔&#xff0c;只有不斷學習&#xff0c;才能照亮前行的道路 ] 0x02.初識與安裝 CUDA 并行計算平臺和編程模型 什么是 CUDA? CUDA&#xff08;Compute Unified Device Architecture&#xff09;是英偉達&#xff08;NVIDIA&#xff09;推出的并行計算平臺和編…

idea提交代碼或更新代碼一直提示token然后登陸失敗無法提交或者更新代碼

最近因為換了電腦需要對開發環境做配置&#xff0c; 遇到了這個問題&#xff0c; 應該是因為我們用到了gitlab&#xff0c;默認的最新的idea會有gitlab插件 強制錄入gitlab的token&#xff0c;如果gitlab不支持token的驗證那么問題就來了 &#xff0c; 不管怎么操作都無法提交或…

FPGA之術語

FPGA之術語 IOSTANDARDDIFF_SSTL12:LVCMOS33:sys_clk_p/n:rst_n:UART時鐘JTAG:GPIOONFIPCIe IOSTANDARD 在電子工程領域&#xff0c;DIFF_SSTL12和LVCMOS33是兩種不同的電氣標準&#xff0c;用于定義信號的電壓級別和特性。 IOSTANDARD是一個在FPGA&#xff08;現場可編程門陣…

Spring MVC深入理解之源碼實現

1、SpringMVC的理解 1&#xff09;談談對Spring MVC的了解 MVC 是模型(Model)、視圖(View)、控制器(Controller)的簡寫&#xff0c;其核心思想是通過將業務邏輯、數據、顯示分離來組織代碼。 Model&#xff1a;數據模型&#xff0c;JavaBean的類&#xff0c;用來進行數據封裝…

【cocos2dx】【iOS工程】如何保存用戶在游戲內的繪畫數據,并將數據以圖像形式展示在預覽界面

【cocos2dx】【iOS工程】如何保存用戶在應用內的操作數據&#xff0c;并將數據以圖像形式展示在預覽界面 設備/引擎&#xff1a;Mac&#xff08;11.6&#xff09;/Mac Mini 開發工具&#xff1a;Xcode&#xff08;15.0.1&#xff09; 開發需求&#xff1a;如何保存用戶在應用…