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

news2025/6/1 23:24:34
  • 操作系统: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;
    }

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

运行结果

灰度值 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 个像素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2393037.html

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

相关文章

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…

一、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;&#…

关于表连接

目录 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…

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

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

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

项目概述 随着无人机技术在物流、测绘、应急救援等领域的广泛应用&#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集群存储高频访问数据(如用户登录态、实时交易数据),配合…

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国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯协…

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

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

Go语言开发的GMQT物联网MQTT消息服务器(mqtt Broker)支持海量MQTT连接和快速低延时消息传输-提供源码可二次开发定制需求

关于GMQT物联网MQTT消息平台 GoFly社区推出《GMQT物联网MQTT消息平台》&#xff0c;完全使用高性能的Go语言编写&#xff0c;内嵌数据库(不依赖三方库)&#xff0c; 全面支持MQTT的v3.0.0、v3.1.1以及完全兼容 MQTT v5 功能。利用Go语言高并发性、高效利用服务器资源、跨平台支…