OpenCV CUDA模塊直方圖計算------在 GPU 上計算輸入圖像的直方圖(histogram)函數histEven()

  • 操作系統:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 編程語言:C++11

算法描述

該函數用于在 GPU 上計算輸入圖像的直方圖(histogram)。它將像素值區間均勻劃分為若干個 bin(桶),并統計每個 bin 中像素的數量。

  • 適用于 單通道圖像(如灰度圖或某個顏色通道)。
  • 使用等間距的分箱方式(即“均勻直方圖”)。
  • 支持 8U 和 32S 類型的圖像。

函數原型

void cv::cuda::histEven 
(InputArray  	src,OutputArray  	hist,int  	histSize,int  	lowerLevel,int  	upperLevel,Stream &  	stream = Stream::Null() 
) 		

參數

  • src:源圖像。支持 CV_8U、CV_16U 或 CV_16S 類型的圖像,并且通道數可以是 1 或 4。如果是 4 通道圖像,則每個通道會分別進行處理。

  • hist:目標直方圖,是一個具有 1 行、histSize 列、數據類型為 CV_32S 的數組。

  • histSize:直方圖的大小(即 bin 的數量)。

  • lowerLevel:最低級 bin 的下界值(包含此值)。

  • upperLevel:最高級 bin 的上界值(不包含此值)。

  • stream:用于異步操作的 CUDA 流對象。

代碼示例

#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// 讀取圖像cv::Mat h_src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );if ( h_src.empty() ){std::cerr << "無法加載圖像!" << std::endl;return -1;}// 上傳到 GPUcv::cuda::GpuMat d_src, d_hist;d_src.upload( h_src );// 設置直方圖參數int histSize   = 256;  // 8-bit 圖像有 256 個灰度級int lowerLevel = 0;int upperLevel = 256;// 創建輸出直方圖 Matd_hist.create( 1, histSize, CV_32SC1 );// 計算直方圖cv::cuda::histEven( d_src, d_hist, histSize, lowerLevel, upperLevel );// 下載結果cv::Mat h_hist;d_hist.download( h_hist );// 打印直方圖內容(可選)for ( int i = 0; i < histSize; ++i ){std::cout << "Bin[" << i << "] = " << h_hist.at< int >( i ) << std::endl;}return 0;
}

運行結果

Bin[0] = 0
Bin[1] = 0
Bin[2] = 0
Bin[3] = 0
Bin[4] = 0
Bin[5] = 0
Bin[6] = 0
Bin[7] = 0
Bin[8] = 0
Bin[9] = 0
Bin[10] = 0
Bin[11] = 0
Bin[12] = 0
Bin[13] = 0
Bin[14] = 0
Bin[15] = 0
Bin[16] = 0
Bin[17] = 0
Bin[18] = 0
Bin[19] = 0
Bin[20] = 0
Bin[21] = 0
Bin[22] = 0
Bin[23] = 0
Bin[24] = 0
Bin[25] = 0
Bin[26] = 0
Bin[27] = 0
Bin[28] = 0
Bin[29] = 0
Bin[30] = 0
Bin[31] = 0
Bin[32] = 0
Bin[33] = 0
Bin[34] = 0
Bin[35] = 0
Bin[36] = 0
Bin[37] = 0
Bin[38] = 0
Bin[39] = 45
Bin[40] = 0
Bin[41] = 0
Bin[42] = 0
Bin[43] = 388
Bin[44] = 0
Bin[45] = 0
Bin[46] = 1171
Bin[47] = 0
Bin[48] = 0
Bin[49] = 0
Bin[50] = 2211
Bin[51] = 0
Bin[52] = 0
Bin[53] = 3583
Bin[54] = 0
Bin[55] = 0
Bin[56] = 5472
Bin[57] = 0
Bin[58] = 0
Bin[59] = 6460
Bin[60] = 0
Bin[61] = 5922
Bin[62] = 0
Bin[63] = 0
Bin[64] = 5104
Bin[65] = 0
Bin[66] = 4325
Bin[67] = 0
Bin[68] = 3100
Bin[69] = 0
Bin[70] = 2479
Bin[71] = 0
Bin[72] = 2093
Bin[73] = 0
Bin[74] = 1730
Bin[75] = 0
Bin[76] = 1566
Bin[77] = 0
Bin[78] = 1469
Bin[79] = 0
Bin[80] = 1377
Bin[81] = 0
Bin[82] = 1345
Bin[83] = 0
Bin[84] = 1335
Bin[85] = 1367
Bin[86] = 0
Bin[87] = 1416
Bin[88] = 0
Bin[89] = 1479
Bin[90] = 1468
Bin[91] = 0
Bin[92] = 1465
Bin[93] = 1438
Bin[94] = 0
Bin[95] = 1328
Bin[96] = 1431
Bin[97] = 0
Bin[98] = 1465
Bin[99] = 1504
Bin[100] = 0
Bin[101] = 1522
Bin[102] = 1564
Bin[103] = 1605
Bin[104] = 0
Bin[105] = 1674
Bin[106] = 1604
Bin[107] = 1741
Bin[108] = 0
Bin[109] = 1774
Bin[110] = 2021
Bin[111] = 2398
Bin[112] = 2598
Bin[113] = 0
Bin[114] = 2673
Bin[115] = 2588
Bin[116] = 2403
Bin[117] = 2126
Bin[118] = 2027
Bin[119] = 1730
Bin[120] = 1676
Bin[121] = 0
Bin[122] = 1554
Bin[123] = 1522
Bin[124] = 1510
Bin[125] = 1529
Bin[126] = 1579
Bin[127] = 1536
Bin[128] = 1603
Bin[129] = 1542
Bin[130] = 1719
Bin[131] = 1795
Bin[132] = 1851
Bin[133] = 1796
Bin[134] = 1919
Bin[135] = 1916
Bin[136] = 2022
Bin[137] = 2198
Bin[138] = 2409
Bin[139] = 2650
Bin[140] = 2626
Bin[141] = 2629
Bin[142] = 2685
Bin[143] = 2411
Bin[144] = 4435
Bin[145] = 1980
Bin[146] = 1930
Bin[147] = 1925
Bin[148] = 1939
Bin[149] = 2058
Bin[150] = 2237
Bin[151] = 4821
Bin[152] = 2411
Bin[153] = 2506
Bin[154] = 2411
Bin[155] = 2507
Bin[156] = 4627
Bin[157] = 2240
Bin[158] = 2277
Bin[159] = 2346
Bin[160] = 4692
Bin[161] = 2352
Bin[162] = 2221
Bin[163] = 2278
Bin[164] = 4174
Bin[165] = 1798
Bin[166] = 1729
Bin[167] = 2888
Bin[168] = 1316
Bin[169] = 1285
Bin[170] = 2222
Bin[171] = 1066
Bin[172] = 1035
Bin[173] = 1955
Bin[174] = 1012
Bin[175] = 1883
Bin[176] = 941
Bin[177] = 998
Bin[178] = 1969
Bin[179] = 990
Bin[180] = 1979
Bin[181] = 971
Bin[182] = 1816
Bin[183] = 836
Bin[184] = 1502
Bin[185] = 651
Bin[186] = 1097
Bin[187] = 538
Bin[188] = 1020
Bin[189] = 487
Bin[190] = 886
Bin[191] = 458
Bin[192] = 1036
Bin[193] = 532
Bin[194] = 1093
Bin[195] = 1145
Bin[196] = 595
Bin[197] = 1227
Bin[198] = 628
Bin[199] = 1176
Bin[200] = 1129
Bin[201] = 595
Bin[202] = 1098
Bin[203] = 1009
Bin[204] = 527
Bin[205] = 999
Bin[206] = 1066
Bin[207] = 1124
Bin[208] = 616
Bin[209] = 1249
Bin[210] = 1236
Bin[211] = 598
Bin[212] = 1139
Bin[213] = 1145
Bin[214] = 947
Bin[215] = 835
Bin[216] = 319
Bin[217] = 567
Bin[218] = 452
Bin[219] = 411
Bin[220] = 364
Bin[221] = 296
Bin[222] = 142
Bin[223] = 225
Bin[224] = 213
Bin[225] = 133
Bin[226] = 94
Bin[227] = 59
Bin[228] = 56
Bin[229] = 41
Bin[230] = 28
Bin[231] = 14
Bin[232] = 10
Bin[233] = 6
Bin[234] = 8
Bin[235] = 0
Bin[236] = 1
Bin[237] = 0
Bin[238] = 1
Bin[239] = 0
Bin[240] = 0
Bin[241] = 0
Bin[242] = 2
Bin[243] = 0
Bin[244] = 0
Bin[245] = 2
Bin[246] = 0
Bin[247] = 0
Bin[248] = 0
Bin[249] = 0
Bin[250] = 0
Bin[251] = 0
Bin[252] = 0
Bin[253] = 0
Bin[254] = 0
Bin[255] = 0
  • 直方圖數據分析
    總體觀察:
    • 圖像中很多灰度級沒有像素(如 Bin[0] 到 Bin[38] 都是 0),說明圖像中沒有非常暗的區域。
    • 從 Bin[39] 開始出現非零值,說明圖像主要集中在 中高亮度區域(約40~255之間)。
    • 中間部分(如 Bin[85]、Bin[144]、Bin[160] 等)有一些明顯高峰,說明圖像中存在較多的中等亮度或高亮度區域。
    • 最后幾個 Bin(235 及以后)又開始減少,說明圖像中純白區域不多。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907563.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907563.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907563.shtml

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

相關文章

龍虎榜——20250530

上證指數陽包陰&#xff0c;量能較前期下跌有放大&#xff0c;但個股跌多漲少&#xff0c;下跌超過4000個。 深證指數和上漲總體相同。 2025年5月30日龍虎榜行業方向分析 1. 醫藥&#xff08;創新藥原料藥&#xff09; 代表標的&#xff1a;華納藥廠、舒泰神、睿智醫藥、華…

HarmonyNext使用request.agent.download實現斷點下載

filedownlaod(API12) &#x1f4da;簡介 filedownload 這是一款支持大文件斷點下載的開源插件&#xff0c;退出應用程序進程殺掉以后或無網絡情況下恢復網絡后&#xff0c;可以在上次位置繼續恢復下載等 版本更新—請查看更新日志!!! 修復已知bug,demo已經更新 &#x1f4d…

nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: 80端口被占用

Nginx啟動報錯&#xff1a;nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) 這個報錯代表80端口被占用 先查看占用80的端口 netstat -aon | findstr :80 把它殺掉&#xff0c;強…

embbeding 視頻截圖

Embedding是什么&#xff1f;有什么作用&#xff1f;是怎么得到的&#xff1f;_嗶哩嗶哩_bilibili

服務器tty2終端如何關機

在服務器的 tty2 或其他虛擬終端上&#xff0c;要安全地進行關機操作&#xff0c;可以使用以下命令之一&#xff1a; 1.1 使用 shutdown 命令&#xff1a; shutdown 命令可以計劃系統關機。默認需要超級用戶權限。 sudo shutdown -h now-h 選項表示關機&#xff08;halt&…

時序數據庫IoTDB啟動方式及集群遷移指南

IoTDB啟動方式 IoTDB在配置啟動時有兩種推薦方式&#xff1a; ?主機名啟動?&#xff1a; ?推薦理由?&#xff1a;主機名啟動方式更為靈活&#xff0c;便于在不同網絡環境中部署相同的IoTDB實例。?工作原理?&#xff1a;IoTDB啟動后會維護一張節點編號與網絡地址的映射表…

如何在Qt中繪制一個帶有動畫的弧形進度條?

如何在Qt中繪制一個弧形的進度條 在圖形用戶界面開發中&#xff0c;進度指示控件&#xff08;Progress Widget&#xff09;是非常常見且實用的組件。CCArcProgressWidget 是一個繼承自 QWidget 的自定義控件&#xff0c;用于繪制圓弧形進度條。當然&#xff0c;筆者看了眼公開…

在 Mac 下 VSCode 中的終端使用 option + b 或 f 的快捷鍵變成輸入特殊字符的解決方案

前言 在終端里&#xff0c;我們可以使用 option b 和 option f 來在我們輸入的命令中進行快速的前后調整光標&#xff0c;但是&#xff0c;在未設置的情況下&#xff0c;在 MacOS 中&#xff0c;會變成輸入特殊字符。 普通鍵盤上是 alt b 和 alt f &#xff0c;只是叫法不…

Android bindservice綁定服務,并同步返回service對象的兩個方法

先上一段代碼&#xff1a; private IDeviceService deviceService null; private ServiceConnection connnull; private synchronized void bindyourservice() { Intent intent new Intent();intent.setPackage("servicepackagename");intent.setAction("…

Go語言之空接口與類型斷言

Go 語言中&#xff0c;接口是一種強大的抽象機制。其中&#xff0c;空接口&#xff08;interface{}&#xff09;和類型斷言為我們提供了處理任意類型與類型檢查的能力。 一、空接口&#xff08;interface{}&#xff09; 空接口是 Go 中最特殊的接口&#xff1a;不包含任何方法…

三、OrcaSlicer預設顯示

一、界面類 主框架使用的是wxWidgets庫&#xff1b;3D模型的渲染區的控件&#xff0c;使用的是imgui庫。 1、Plater 此類在OrcaSlicer\src\slic3r\GUI\Plater.hpp文件中定義 1.1 Plater::priv 此結構體是Plater的數據類&#xff0c;各種數據的對象和指針保存在此結構體中。如…

00 QEMU源碼中文注釋與架構講解

QEMU源碼中文注釋與架構講解 先占坑&#xff1a;等后續完善后再更新此文章 注釋作者將狼才鯨創建日期2025-05-30更新日期NULL CSDN閱讀地址&#xff1a;00 QEMU源碼中文注釋與架構講解Gitee源碼倉庫地址&#xff1a;才鯨嵌入式/qemu 一、前言 參考網址 QEMU 源碼目錄簡介qe…

一、Sqoop歷史發展及原理

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月30日 專欄&#xff1a;Sqoop教程 在大數據時代&#xff0c;數據往往分散存儲在各種不同類型的系統中。其中&#xff0c;傳統的關系型數據庫 (RDBMS) 如 MySQL, Oracle, PostgreSQL 等&#xff0c;仍然承載著大量的關鍵業務…

【Halcon】圖像分割中的 regiongrowing 與dyn_threshold 動態閾值 算法詳解對比

圖像分割中的 regiongrowing 與動態閾值算法詳解對比 在使用 HALCON 進行圖像處理時&#xff0c;圖像分割是最常見也最關鍵的操作之一。本文將深入講解 regiongrowing 算子的原理與使用方法&#xff0c;并與另一常見方法——動態閾值 (dyn_threshold) 進行詳細對比&#xff0c…

Docker部署項目無法訪問,登錄超時完整排查攻略

項目背景&#xff1a;遷移前后端應用&#xff0c;prod環境要求保留443端口&#xff0c;開發環境37800端口&#xff0c;后端容器端口為8000&#xff0c;前端為80&#xff0c;fastAPI對外端口為41000 生產環境部署在VM01,開發環境部署在VM03&#xff0c;在VM01配置nginx轉發 [r…

充電便捷,新能源汽車移動充電服務如何預約充電

隨著新能源汽車的普及&#xff0c;充電便捷性成為影響用戶體驗的關鍵因素之一。傳統的固定充電樁受限于地理位置和數量&#xff0c;難以完全滿足用戶需求&#xff0c;而移動充電服務的出現&#xff0c;為車主提供了更加靈活的補能方式。通過手機APP、小程序或在線平臺&#xff…

探索C++標準模板庫(STL):從容器到底層奧秘-全面解析String類高效技巧(上篇)

前引&#xff1a;在現代軟件開發中&#xff0c;字符串處理是幾乎所有程序的核心需求之一。無論是文本解析、網絡通信&#xff0c;還是用戶交互&#xff0c;高效且安全的字符串操作能力直接決定了代碼的質量與可維護性。而C標準模板庫&#xff08;Standard Template Library, ST…

Python爬蟲實戰:抓取百度15天天氣預報數據

&#x1f310; 編程基礎第一期《9-30》–使用python中的第三方模塊requests&#xff0c;和三個內置模塊(re、json、pprint)&#xff0c;實現百度地圖的近15天天氣信息抓取 記得安裝 pip install requests&#x1f4d1; 項目介紹 網絡爬蟲是Python最受歡迎的應用場景之一&…

HTML常見事件詳解:從入門到實戰應用

前言 在Web開發中&#xff0c;事件是用戶與網頁交互的核心機制。HTML事件讓我們能夠響應用戶的各種操作&#xff0c;如點擊、鼠標移動、鍵盤輸入等。掌握HTML事件是前端開發的基礎技能之一&#xff0c;本文將深入探討HTML中的常見事件類型及其實際應用。 HTML事件概覽總結 H…

模具制造業數字化轉型:精密模塑,以數字之力鑄就制造基石

模具被譽為 “工業之母”&#xff0c;是制造業的重要基石&#xff0c;其精度直接決定了工業產品的質量與性能。在工業制造向高精度、智能化發展的當下&#xff0c;《模具制造業數字化轉型&#xff1a;精密模塑&#xff0c;以數字之力鑄就制造基石》這一主題&#xff0c;精準點明…