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

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

算法描述

OpenCV 的 CUDA 模块 中用于在 GPU 上计算图像直方图的一个函数。

计算单通道 8-bit 图像的灰度直方图(Histogram)。

该函数在 GPU 上执行,适用于加速大规模图像处理任务中的直方图统计操作。

函数原型

cpp 复制代码
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)操作,可用于流水线优化。

⚠️ 如果输入图像不是灰度图,请先进行转换:

使用场景

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

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

代码示例

cpp 复制代码
#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;
    }

    // 将图像上传到 GPU
    cv::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;
}

运行结果

bash 复制代码
灰度值 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 个像素
相关推荐
学术 学术 Fun1 分钟前
✨ OpenAudio S1:影视级文本转语音与语音克隆Mac整合包
人工智能·语音识别
双翌视觉35 分钟前
机器视觉对位中的常见模型与技术原理
数码相机·计算机视觉·机器视觉
风铃喵游43 分钟前
让大模型调用MCP服务变得超级简单
前端·人工智能
booooooty1 小时前
基于Spring AI Alibaba的多智能体RAG应用
java·人工智能·spring·多智能体·rag·spring ai·ai alibaba
PyAIExplorer1 小时前
基于 OpenCV 的图像 ROI 切割实现
人工智能·opencv·计算机视觉
风口猪炒股指标2 小时前
技术分析、超短线打板模式与情绪周期理论,在市场共识的形成、分歧、瓦解过程中缘起性空的理解
人工智能·博弈论·群体博弈·人生哲学·自我引导觉醒
ai_xiaogui2 小时前
一键部署AI工具!用AIStarter快速安装ComfyUI与Stable Diffusion
人工智能·stable diffusion·部署ai工具·ai应用市场教程·sd快速部署·comfyui一键安装
聚客AI3 小时前
Embedding进化论:从Word2Vec到OpenAI三代模型技术跃迁
人工智能·llm·掘金·日新计划
weixin_387545643 小时前
深入解析 AI Gateway:新一代智能流量控制中枢
人工智能·gateway
聽雨2374 小时前
03每日简报20250705
人工智能·社交电子·娱乐·传媒·媒体