OpenCV CUDA模块直方图计算------在 GPU 上计算输入图像的直方图(histogram)函数histEven()

news2025/6/4 20:45:40
  • 操作系统: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;
    }

    // 上传到 GPU
    cv::cuda::GpuMat d_src, d_hist;
    d_src.upload( h_src );

    // 设置直方图参数
    int histSize   = 256;  // 8-bit 图像有 256 个灰度级
    int lowerLevel = 0;
    int upperLevel = 256;

    // 创建输出直方图 Mat
    d_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.coloradmin.cn/o/2396871.html

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

相关文章

ETL脚本节点使用的方式

随着大数据时代的到来&#xff0c;企业对数据处理的需求日益增长&#xff0c;ETL 作为数据整合的关键技术&#xff0c;逐渐走进我们的视野。本文将为您揭秘 ETL 脚本节点的使用方式&#xff0c;助您轻松驾驭数据处理新境界。 一、ETL脚本的优势 1.提高效率&#xff1a;ETL 脚…

PH热榜 | 2025-06-02

1. Circuit Tracer 标语&#xff1a;Anthropic的开放工具&#xff1a;让我们了解AI是如何思考的 介绍&#xff1a;Anthropic的开源工具Circuit Tracer可以帮助研究人员理解大型语言模型&#xff08;LLMs&#xff09;&#xff0c;它通过将内部计算可视化为归因图的方式展现相关…

: influxdb + grafana+JMeter

influxdb和Grafana 不安装在被测机器上&#xff0c;可以统一放到一台机器上面 1、influxdb&#xff1a;一种时序数据库&#xff0c; 可以永久性保存数据【除非手动清除和数据库坏了】 2、Grafana&#xff1a;grafana是一款用go编写的开源应用&#xff0c;用于大规模指标数据的可…

TDengine 基于 TDgpt 的 AI 应用实战

基于 TDgpt 时序数据智能体的风力发电预测 作者&#xff1a; derekchen Demo 数据集准备 我们使用公开的UTSD数据集里面的某风场发电数据&#xff0c;作为预测算法的数据来源&#xff0c;基于历史数据预测未来一天内的每15分钟的发电量。原始数据集的采集频次为4秒&#xff…

RocketMQ 消息发送核心源码解析:DefaultMQProducerImpl.send () 方法深度剖析

引言 在分布式系统中&#xff0c;消息队列是实现异步通信、服务解耦和流量削峰的关键组件。Apache RocketMQ 作为一款高性能、高可靠的消息中间件&#xff0c;被广泛应用于各类互联网场景。其中&#xff0c;消息发送是最基础也是最重要的功能之一。本文将深入剖析 RocketMQ 中…

BiliNote部署实践

​ 开源地址&#xff1a; https://github.com/JefferyHcool/BiliNote &#x1f680; 快速开始 1. 克隆仓库 git clone https://github.com/JefferyHcool/BiliNote.git cd BiliNote mv .env.example .env2. 启动后端&#xff08;FastAPI&#xff09; cd backend pip insta…

bismark OT CTOT OB CTOB 以及mapping后的bam文件中的XG,XR列的含义

首先&#xff0c;OT&#xff0c;OB&#xff0c;CTOT&#xff0c;CTOB都是描述测序reads的&#xff0c;而不是描述参考基因组的。 bisul-fate建库会将DNA双链文库中非甲基化的C转化成U。转化结束后&#xff0c;被转化的U和互补链的G并不配对。此时正链&#xff08;&#xff0c;…

Android Native 之 adbd进程分析

目录 1、adbd守护进程 2、adbd权限降级 3、adbd命令解析 1&#xff09;adb shell 2&#xff09;adb root 3&#xff09;adb reboot 4、案例 1&#xff09;案例之实现不需要执行adb root命令自动具有root权限 2&#xff09;案例之实现不需要RSA认证直接能够使用adb she…

CAN通讯协议中各种参数解析

1.各种参数缩写 2.多帧传输时间参数解析 - Sender&#xff08;左侧&#xff09; 指的是 多帧数据的发送者&#xff0c;也就是&#xff1a; ECU&#xff08;被测系统 / 响应方&#xff09; - Receiver&#xff08;右侧&#xff09; 指的是 多帧数据的接收者&#xff0c;也就是…

网络攻防技术三:网络脆弱性分析

文章目录 一、影响安全的因素二、计算机网络三、网络体系结构脆弱性1、因特网容易被攻击的特性 四、典型网络协议安全性分析&#xff08;重要&#xff09;1、IPv42、RIP&#xff08;UDP)3、ICMP(UDP)4、ARP5、OSPF(IP数据报&#xff09;6、BGP(TCP)7、UDP8、TCP9、DNS(UDP)10、…

(八)登录认证与学生写作画像

本次将赵昱琨同学之前完成的学生写作画像与智能学习路径规划的后端与目前已有的后端框架进行整合。同时为了实现学生写作画像与智能学习路径规划&#xff0c;需要在之前简易的登录系统上进行重构&#xff0c;所以本次大规模重写了登录模块&#xff0c;同时发现很多过去冗余的代…

Netty学习example示例

文章目录 simpleServer端NettyServerNettyServerHandler Client端NettyClientNettyClientHandler tcp&#xff08;粘包和拆包&#xff09;Server端NettyTcpServerNettyTcpServerHandler Client端NettyTcpClientNettyTcpClientHandler protocolcodecCustomMessageDecoderCustomM…

[RoarCTF 2019]Easy Calc

查看源代码 <!--Ive set up WAF to ensure security.--> <script>$(#calc).submit(function(){$.ajax({url:"calc.php?num"encodeURIComponent($("#content").val()),type:GET,success:function(data){$("#result").html(<div …

[Windows]在Win上安装bash和zsh - 一个脚本搞定

目录 前言安装步骤配置要求下载安装脚本启动程序 前言 Windows是一个很流行的系统, 但是在Windows上安装bash和zsh一直是一个让人头疼的问题. 本蛙特意打包了一个程序, 用于一站式解决这一类的问题. 安装步骤 配置要求 系统: Windows软件: Powershell 5.1或以上 下载安装…

从认识AI开始-----解密LSTM:RNN的进化之路

前言 我在上一篇文章中介绍了 RNN&#xff0c;它是一个隐变量模型&#xff0c;主要通过隐藏状态连接时间序列&#xff0c;实现了序列信息的记忆与建模。然而&#xff0c;RNN在实践中面临严重的“梯度消失”与“长期依赖建模困难”问题&#xff1a; 难以捕捉相隔很远的时间步之…

leetcode0513. 找树左下角的值-meidum

1 题目&#xff1a;找树左下角的值 官方标定难度&#xff1a;中 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7]…

命令行式本地与服务器互传文件

文章目录 1. 背景2. 传输方式2.1 SCP 协议传输2.2 SFTP 协议传输 3. 注意 命令行式本地与服务器互传文件 1. 背景 多设备协同工作中&#xff0c;因操作系统的不同&#xff0c;我们经常需要将另外一个系统中的文件传输到本地PC进行浏览、编译。多设备文件互传&#xff0c;在嵌入…

LabelImg: 开源图像标注工具指南

LabelImg: 开源图像标注工具指南 1. 简介 LabelImg 是一个图形化的图像标注工具&#xff0c;使用 Python 和 Qt 开发。它是目标检测任务中最常用的标注工具之一&#xff0c;支持 PASCAL VOC 和 YOLO 格式的标注输出。该工具开源、免费&#xff0c;并且跨平台支持 Windows、Lin…

计算机网络 TCP篇常见面试题总结

目录 TCP 的三次握手与四次挥手详解 1. 三次握手&#xff08;Three-Way Handshake&#xff09; 2. 四次挥手&#xff08;Four-Way Handshake&#xff09; TCP 为什么可靠&#xff1f; 1. 序列号与确认应答&#xff08;ACK&#xff09; 2. 超时重传&#xff08;Retransmis…

树欲静而风不止,子欲养而亲不待

2025年6月2日&#xff0c;13~26℃&#xff0c;一般 待办&#xff1a; 物理2 、物理 学生重修 职称材料的最后检查 教学技能大赛PPT 遇见&#xff1a;使用通义创作了一副照片&#xff0c;很好看&#xff01;都有想用来创作自己的头像了&#xff01; 提示词如下&#xff1a; A b…