OpenCV绘制直方图,B G R三通道的

本文介绍了如何使用OpenCV绘制一维直方图,特别是BGR三通道的直方图。文章提供了相关代码示例,并推荐了一个学习资源——opencvchina.com,包含视频讲解。直方图的构造涉及`CvHistogram`结构,包括类型、存储方式、直方柱划分等。此外,还提及了直方图显示函数`DrawHistogram`。建议初学者结合实例和视频深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习了好久,才把这个直方图的绘制学会,分享出来给大家,大家也可以到这个网站里面学习,有视频讲解的http://www.opencvchina.com/     ,很不错的哦!附带源码。


需要绘制直方图的原图像:


结果显示:




下面简要说明:(主要来源 www.opencvchina.com)

一维直方图:



typedef struct CvHistogram

{

    int     type; 这个可以不用管

    CvArr*  bins; 存放直方图在每一维上直方柱的具体数据,由于存在多维直方图。如果是一维直方图,那么bins就是一个一维的矩阵;如果是二维直方图,那么bins就是一个二维的矩阵,等等。 如上图的一维直方图,,这里就可以认为bins[]={4,6,13,6,4,5},bins中存放的是具体数值。

    float   thresh[CV_MAX_DIM][2]; /* 直方柱的划分 是统一划分的,即均等划分的 */

    float** thresh2; /*不均等划分,可以自动设定每一个直方柱的取值范围。之所以是二级指针,每一个柱的取值范围用一级指针表示,又存在多个直方柱,所以需要二级指针才能表示。每一个不在指定范围的值,会被忽略掉。*/

    CvMatND mat; /* 存放直方图的数据 */

}


CvHistogram* cvCreateHist( int dims, int* sizes, int type,

                           float** ranges=NULL, int uniform=1 );

dims:表示直方图的维度

sizes:每一维上直方柱(bin)的数据 ,如果是6×8 bin 的,那么sizes[0]=6 ,sizes[1]=8,

type

直方图存储数据的方式: 

CV_HIST_ARRAY 意味着直方图数据表示为多维密集数组 CvMatND;

 CV_HIST_TREE 意味着直方图数据表示为多维稀疏数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值