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

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 个像素

相关文章:

  • XCTF-web-mfw
  • vue修改配置文件.env.development不生效
  • STM32:ESP8266 + MQTT 云端与报文全解析
  • MCP Server的五种主流架构:从原理到实践的深度解析
  • Vue Router 钩子函数与组件生命周期执行顺序详解
  • 【赵渝强老师】OceanBase的部署架构
  • GIT命令行的一些常规操作
  • HIS换代升级辅助脚手架:数据清洗、人员信息标准化、电子病历接口标准化、多模态影像接口标准化
  • 佰力博科技与您探讨DEAI介电阻抗分析仪的特点
  • 960g轻薄本,把科技塞进巧克力盒子
  • 数据分析学习笔记——A/B测试
  • PostgreSQL 数据完整性检查工具对比:amcheck 与 pg_checksums
  • : influxdb + grafana+JMeter
  • WHAT - 学习 WebSocket 实时 Web 开发
  • 【Redis】热点key问题,的原因和处理,一致性哈希,删除大key的方法
  • 单点登陆(SSO)简介-笔记
  • 用 Python 和 Rust 构建可微分的分子势能模型:深入解析 MOLPIPx 库
  • Redis 的内存回收机制
  • 资质评审周期压缩方案 实验室引入质检LIMS系统的关键步骤
  • 毫秒级数据采集的极致优化:如何用C#实现高性能、无冗余的实时文件写入?
  • 潍坊外贸网站优化/微商引流一般用什么软件
  • 免费看黄金的软件/郑州本地seo顾问
  • 移动端网页设计图片/seo顾问阿亮
  • 惠州响应式网站哪家好/张雷明履新河南省委常委
  • 酒店网站建设设计/上海seo网站排名优化公司
  • 上海网站建设方案/惠州seo快速排名