当前位置: 首页 > article >正文

OpenCV CUDA模块直方图计算------在 GPU 上计算图像直方图的函数calcHist()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

OpenCV 的 CUDA 模块 中用于在 GPU 上计算图像直方图的一个函数。
计算单通道 8-bit 图像的灰度直方图(Histogram)。
该函数在 GPU 上执行,适用于加速大规模图像处理任务中的直方图统计操作。

函数原型

void cv::cuda::calcHist 	
(InputArray  	src,OutputArray  	hist,Stream &  	stream = Stream::Null() 
) 		

参数

  • src 源图像,类型为 CV_8UC1(即单通道、8位无符号整型图像)。
  • hist 目标直方图,具有 1 行、256 列,类型为 CV_32SC1(即单通道、32位有符号整型)。
  • stream 用于异步执行的流(Stream),可实现与主机的异步操作。

注意事项

✅ 仅支持单通道 8-bit 图像(如 CV_8UC1),不支持多通道或浮点图像。
✅ 输出直方图大小固定为 256,每个元素表示对应灰度值出现的次数。
✅ 支持 CUDA 异步流(Stream)操作,可用于流水线优化。
⚠️ 如果输入图像不是灰度图,请先进行转换:

使用场景

适合需要快速获取图像灰度分布的场合,例如:

  • 图像增强前的分析
  • 直方图均衡化准备步骤
  • 图像分割、阈值选取等预处理阶段
  • 实时视频处理中统计帧信息

代码示例

#include <iostream>
#include <opencv2/cudaimgproc.hpp>  // 包含 cuda::calcHist
#include <opencv2/opencv.hpp>int main()
{// 读取灰度图像cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );if ( img.empty() ){std::cerr << "无法加载图像" << std::endl;return -1;}// 将图像上传到 GPUcv::cuda::GpuMat d_img;d_img.upload( img );// 创建输出直方图 Mat(256 个 bin)cv::cuda::GpuMat d_hist;d_hist.create( 256, 1, CV_32F );  // 浮点类型// 计算直方图cv::cuda::calcHist( d_img, d_hist );cv::Mat hist;d_hist.download( hist );  // 下载到 CPU// 转换为整型cv::Mat histInt;hist.convertTo( histInt, CV_32S );  // CV_32S 表示 32位有符号整型// 打印有效数据for ( int i = 0; i < 256; ++i ){int count = static_cast< int >( histInt.at< int >( i ) );if ( count > 0 )std::cout << "灰度值 " << i << ": " << count << " 个像素" << std::endl;}return 0;
}

运行结果

灰度值 39: 45 个像素
灰度值 43: 388 个像素
灰度值 46: 1171 个像素
灰度值 50: 2211 个像素
灰度值 53: 3583 个像素
灰度值 56: 5472 个像素
灰度值 59: 6460 个像素
灰度值 61: 5922 个像素
灰度值 64: 5104 个像素
灰度值 66: 4325 个像素
灰度值 68: 3100 个像素
灰度值 70: 2479 个像素
灰度值 72: 2093 个像素
灰度值 74: 1730 个像素
灰度值 76: 1566 个像素
灰度值 78: 1469 个像素
灰度值 80: 1377 个像素
灰度值 82: 1345 个像素
灰度值 84: 1335 个像素
灰度值 85: 1367 个像素
灰度值 87: 1416 个像素
灰度值 89: 1479 个像素
灰度值 90: 1468 个像素
灰度值 92: 1465 个像素
灰度值 93: 1438 个像素
灰度值 95: 1328 个像素
灰度值 96: 1431 个像素
灰度值 98: 1465 个像素
灰度值 99: 1504 个像素
灰度值 101: 1522 个像素
灰度值 102: 1564 个像素
灰度值 103: 1605 个像素
灰度值 105: 1674 个像素
灰度值 106: 1604 个像素
灰度值 107: 1741 个像素
灰度值 109: 1774 个像素
灰度值 110: 2021 个像素
灰度值 111: 2398 个像素
灰度值 112: 2598 个像素
灰度值 114: 2673 个像素
灰度值 115: 2588 个像素
灰度值 116: 2403 个像素
灰度值 117: 2126 个像素
灰度值 118: 2027 个像素
灰度值 119: 1730 个像素
灰度值 120: 1676 个像素
灰度值 122: 1554 个像素
灰度值 123: 1522 个像素
灰度值 124: 1510 个像素
灰度值 125: 1529 个像素
灰度值 126: 1579 个像素
灰度值 127: 1536 个像素
灰度值 128: 1603 个像素
灰度值 129: 1542 个像素
灰度值 130: 1719 个像素
灰度值 131: 1795 个像素
灰度值 132: 1851 个像素
灰度值 133: 1796 个像素
灰度值 134: 1919 个像素
灰度值 135: 1916 个像素
灰度值 136: 2022 个像素
灰度值 137: 2198 个像素
灰度值 138: 2409 个像素
灰度值 139: 2650 个像素
灰度值 140: 2626 个像素
灰度值 141: 2629 个像素
灰度值 142: 2685 个像素
灰度值 143: 2411 个像素
灰度值 144: 4435 个像素
灰度值 145: 1980 个像素
灰度值 146: 1930 个像素
灰度值 147: 1925 个像素
灰度值 148: 1939 个像素
灰度值 149: 2058 个像素
灰度值 150: 2237 个像素
灰度值 151: 4821 个像素
灰度值 152: 2411 个像素
灰度值 153: 2506 个像素
灰度值 154: 2411 个像素
灰度值 155: 2507 个像素
灰度值 156: 4627 个像素
灰度值 157: 2240 个像素
灰度值 158: 2277 个像素
灰度值 159: 2346 个像素
灰度值 160: 4692 个像素
灰度值 161: 2352 个像素
灰度值 162: 2221 个像素
灰度值 163: 2278 个像素
灰度值 164: 4174 个像素
灰度值 165: 1798 个像素
灰度值 166: 1729 个像素
灰度值 167: 2888 个像素
灰度值 168: 1316 个像素
灰度值 169: 1285 个像素
灰度值 170: 2222 个像素
灰度值 171: 1066 个像素
灰度值 172: 1035 个像素
灰度值 173: 1955 个像素
灰度值 174: 1012 个像素
灰度值 175: 1883 个像素
灰度值 176: 941 个像素
灰度值 177: 998 个像素
灰度值 178: 1969 个像素
灰度值 179: 990 个像素
灰度值 180: 1979 个像素
灰度值 181: 971 个像素
灰度值 182: 1816 个像素
灰度值 183: 836 个像素
灰度值 184: 1502 个像素
灰度值 185: 651 个像素
灰度值 186: 1097 个像素
灰度值 187: 538 个像素
灰度值 188: 1020 个像素
灰度值 189: 487 个像素
灰度值 190: 886 个像素
灰度值 191: 458 个像素
灰度值 192: 1036 个像素
灰度值 193: 532 个像素
灰度值 194: 1093 个像素
灰度值 195: 1145 个像素
灰度值 196: 595 个像素
灰度值 197: 1227 个像素
灰度值 198: 628 个像素
灰度值 199: 1176 个像素
灰度值 200: 1129 个像素
灰度值 201: 595 个像素
灰度值 202: 1098 个像素
灰度值 203: 1009 个像素
灰度值 204: 527 个像素
灰度值 205: 999 个像素
灰度值 206: 1066 个像素
灰度值 207: 1124 个像素
灰度值 208: 616 个像素
灰度值 209: 1249 个像素
灰度值 210: 1236 个像素
灰度值 211: 598 个像素
灰度值 212: 1139 个像素
灰度值 213: 1145 个像素
灰度值 214: 947 个像素
灰度值 215: 835 个像素
灰度值 216: 319 个像素
灰度值 217: 567 个像素
灰度值 218: 452 个像素
灰度值 219: 411 个像素
灰度值 220: 364 个像素
灰度值 221: 296 个像素
灰度值 222: 142 个像素
灰度值 223: 225 个像素
灰度值 224: 213 个像素
灰度值 225: 133 个像素
灰度值 226: 94 个像素
灰度值 227: 59 个像素
灰度值 228: 56 个像素
灰度值 229: 41 个像素
灰度值 230: 28 个像素
灰度值 231: 14 个像素
灰度值 232: 10 个像素
灰度值 233: 6 个像素
灰度值 234: 8 个像素
灰度值 236: 1 个像素
灰度值 238: 1 个像素
灰度值 242: 2 个像素
灰度值 245: 2 个像素

相关文章:

OpenCV CUDA模块直方图计算------在 GPU 上计算图像直方图的函数calcHist()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 OpenCV 的 CUDA 模块 中用于在 GPU 上计算图像直方图的一个函数。 计算单通道 8-bit 图像的灰度直方图&#xff08;Histogram&#xff09;。 该函…...

EMS只是快递那个EMS吗?它跟能源有什么关系?

在刚刚落幕的深圳人工智能终端展上&#xff0c;不少企业展示了与数字能源相关的技术和服务&#xff0c;其中一项关键系统——EMS&#xff08;Energy Management System&#xff0c;能量管理系统&#xff09;频频亮相。这个看似低调的名字&#xff0c;实际上正悄然成为未来能源管…...

日志技术-LogBack、Logback快速入门、Logback配置文件、Logback日志级别

一. 日志技术 1. 程序中的日志&#xff0c;是用来记录应用程序的运行信息、状态信息、错误信息等。 2. JUL&#xff1a;(java.util.logging)这是JavaSE平台提供的官方日志框架&#xff0c;也被称为JUL。配置相对简单&#xff0c;但不够灵活&#xff0c;性能较差。 3.Logs4j&…...

修改Cinnamon主题

~/.themes/Brunnera-Dark/cinnamon/cinnamon.css 1.修改 Tooltip 圆角大小&#xff0c;边框颜色&#xff0c;背景透明度 #Tooltip { border-radius: 10px; color: rgba(255, 255, 255, 0.8); border: 1px solid rgba(255, 255, 255, 0.6); background-color: rgba(0,…...

91.评论日记

2025年5月30日20:27:06 AI画减速器图纸&#xff1f; 呜呜为什么读到机械博士毕业了才有啊 | 新迪数字2025新品发布会 | AI工业软件 | 三维CAD | 国产自主_哔哩哔哩_bilibili...

HTML5实现简洁的端午节节日网站源码

HTML5实现简洁的端午节节日网站源码 前言一、设计来源1.1 网站首页界面1.2 端午由来界面1.3 节日活动界面1.4 传统美食界面1.5 民俗文化界面1.6 登录界面1.7 注册界面 二、效果和源码2.1 动态效果2.2 源代码 结束语 HTML5实现简洁的端午节节日网站源码&#xff0c;酷炫的大气简…...

Window10+ 安装 go环境

一、 下载 golang 源码&#xff1a; 去官网下载&#xff1a; https://go.dev/dl/ &#xff0c;当前时间&#xff08;2025-05&#xff09;最新版本如下: 二、 首先在指定的磁盘下创建几个文件夹 比如在 E盘创建 software 文件夹 E:\SoftWare,然后在创建如下几个文件夹 E:\S…...

AWS WebRTC:获取ICE服务地址(part 2): ICE Agent的作用

上一篇&#xff0c;已经获取到了ICE服务地址&#xff0c;从返回结果中看&#xff0c;是两组TURN服务地址。 拿到这些地址有什么用呢&#xff1f;接下来就要说到WebRTC中ICE Agent的作用了&#xff0c;返回的服务地址会传给WebRTC最终给到ICE Agent。 ICE Agent的作用&#xf…...

一、Sqoop历史发展及原理

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月30日 专栏&#xff1a;Sqoop教程 在大数据时代&#xff0c;数据往往分散存储在各种不同类型的系统中。其中&#xff0c;传统的关系型数据库 (RDBMS) 如 MySQL, Oracle, PostgreSQL 等&#xff0c;仍然承载着大量的关键业务…...

React 编译器 RC

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff0c;一位前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧和知识归纳总结✍。 感谢支持&#x1f495;&#x1f495;&#…...

PyTorch 中mm和bmm函数的使用详解

torch.mm 是 PyTorch 中用于 二维矩阵乘法&#xff08;matrix-matrix multiplication&#xff09; 的函数&#xff0c;等价于数学中的 A B 矩阵乘积。 一、函数定义 torch.mm(input, mat2) → Tensor执行的是两个 2D Tensor&#xff08;矩阵&#xff09;的标准矩阵乘法。 in…...

关于表连接

目录 1.左连接 2.右连接 3.内连接 4.全外连接 5.笛卡尔积 -- 创建表A CREATE TABLE A(PNO VARCHAR2(10) PRIMARY KEY, PAMT NUMBER, A_DATE DATE);-- 向表A插入数据 INSERT INTO A VALUES (01001, 100, TO_DATE(2005-01-01, YYYY-MM-DD)); INSERT INTO A VALUES (010…...

【计算机网络】fork()+exec()创建新进程(僵尸进程及孤儿进程)

文章目录 一、基本概念1. fork() 系统调用2. exec() 系列函数 二、典型使用场景1. 创建子进程执行新程序2. 父子进程执行不同代码 三、核心区别与注意事项四、组合使用技巧1. 重定向子进程的输入/输出2. 创建多级子进程 五、常见问题与解决方案僵尸进程&#xff08;Zombie Proc…...

QPS 和 TPS 详解

QPS 和 TPS 是性能测试中的两个核心指标&#xff0c;用于衡量系统的吞吐能力&#xff0c;但关注点不同。以下是具体解析&#xff1a; 1. QPS&#xff08;Queries Per Second&#xff09; 定义&#xff1a;每秒查询数&#xff0c;表示系统每秒能处理的请求数量&#xff08;无论…...

Word表格怎样插入自动序号或编号

在Word文档中编辑表格时&#xff0c;经常需要为表格添加序号或编号&#xff0c;可以设置为自动序号或编号&#xff0c;当删除行时&#xff0c;编号会自动变化&#xff0c;不用手工再重新编号。如图所示。 序号数据1数据21300300230030033003004300300 一&#xff0c;建立word表…...

数据结构:导论

目录 什么是“第一性原理”&#xff1f; 什么是“数据结构”&#xff1f; 数据结构解决的根本问题是什么&#xff1f; 数据结构的两大分类 数据结构的基本操作 数据结构与算法的关系 学习数据结构的底层目标 什么是“第一性原理”&#xff1f; 在正式进入数据结构之前&…...

青少年编程与数学 02-020 C#程序设计基础 13课题、数据访问

青少年编程与数学 02-020 C#程序设计基础 13课题、数据访问 一、使用数据库1. 使用ADO.NET连接数据库连接SQL Server示例连接其他数据库 2. 使用Entity Framework (EF Core)安装EF Core示例代码 3. 数据绑定到WinForms控件DataGridView绑定简单控件绑定 4. 使用本地数据库(SQLi…...

无人机仿真环境(3维)附项目git链接

项目概述 随着无人机技术在物流、测绘、应急救援等领域的广泛应用&#xff0c;其自主导航、避障算法、路径规划及多机协同等核心技术的研究需求日益迫切。为降低实地测试成本、提高研发效率&#xff0c;本项目旨在构建一个高精度、可扩展的​​无人机三维虚拟仿真环境​​&…...

湖北理元理律师事务所:债务优化中的“生活锚点”设计

在债务重组领域&#xff0c;一个常被忽视的核心矛盾是&#xff1a;还款能力与生存需求的冲突。过度压缩生活支出还债&#xff0c;可能导致收入中断&#xff1b;放任债务膨胀&#xff0c;又加剧精神压力。湖北理元理律师事务所通过“三步平衡法”&#xff0c;尝试在法理框架内破…...

Python 训练营打卡 Day 30-模块和库的导入

模块和库的导入 1.1标准导入 import mathprint("方式1: 使用 import math") print(f"圆周率π的值: {math.pi}") print(f"2的平方根: {math.sqrt(2)}\n") 1.2从库中导入特定项 from math import pi, sqrtprint("方式2&#xff1a;使用 f…...

前端实现图片压缩:基于 HTML5 File API 与 Canvas 的完整方案

在 Web 开发中,处理用户上传的图片时,前端压缩可以有效减少服务器压力并提升上传效率。本文将详细讲解如何通过<input type="file">实现图片上传,结合 Canvas 实现图片压缩,并实时展示压缩前后的图片预览和文件大小对比。 一、核心功能架构 我们将实现以…...

【Docker管理工具】部署Docker管理面板DweebUI

【Docker管理工具】部署Docker管理面板DweebUI 一、DweebUI介绍1.1 DweebUI 简介1.2 主要特点1.3 使用场景 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载DweebUI镜像五、…...

【后端高阶面经:架构篇】50、数据存储架构:如何改善系统的数据存储能力?

一、数据存储架构设计核心原则 (一)分层存储架构:让数据各得其所 根据数据访问频率和价值,将数据划分为热、温、冷三层,匹配不同存储介质,实现性能与成本的平衡。 热数据层:访问频率>100次/秒。采用Redis集群存储高频访问数据(如用户登录态、实时交易数据),配合…...

编程之巅:语言的较量

第一章&#xff1a;代码之城的召集令 在遥远的数字大陆上&#xff0c;有一座名为“代码之城”的神秘都市。这里居住着各种编程语言的化身&#xff0c;他们以拟人化的形态生活&#xff0c;每种语言都有独特的性格与技能。Python是个优雅的学者&#xff0c;C是个硬核战士&#x…...

STM32 通过 ESP8266 通信详解

✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进 ❤欢迎关注我的知乎&#xff1a;对error视而不见 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 &#x1f34e;获取更多嵌入式资料可点击链接进群领…...

Qt/C++开发监控GB28181系统/sip协议/同时支持udp和tcp模式/底层协议解析

一、前言说明 在gb28181-2011协议中&#xff0c;只有udp要求&#xff0c;从2016版本开始要求支持tcp&#xff0c;估计也是在多年的实际运行过程中&#xff0c;发现有些网络环境差的场景下&#xff0c;一些udp交互指令丢失导致功能异常&#xff0c;所以后面修订的时候增加了tcp…...

晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册

晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册 CK-FR03-TCP是一款基于射频识别技术的高频RFID标签读卡器&#xff0c;读卡器工作频率为13.56MHZ&#xff0c;支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯协…...

山海鲸轻 3D 渲染技术深度解析:预渲染如何突破多终端性能瓶颈

在前期课程中&#xff0c;我们已系统讲解了山海鲸两大核心渲染模式——云渲染与端渲染的技术特性及配置方法。为满足复杂场景下的差异化需求&#xff0c;山海鲸创新推出轻3D渲染功能&#xff0c;本文将深度解析该技术的实现原理与操作实践。 一、轻3D功能研发背景 针对多终端协…...

t014-项目申报管理系统 【springBoot 含源码】

项目演示视频 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;项目信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行…...

阻止H5页面中键盘收起的问题

在移动端H5开发中&#xff0c;当输入框失去焦点时&#xff0c;键盘会自动收起&#xff0c;但有时我们需要阻止这种行为。以下是几种解决方案&#xff1a; 常见原因 输入框失去焦点触发键盘收起页面滚动或触摸其他区域导致键盘收起某些浏览器(特别是iOS Safari)的默认行为 解…...