opencv CvHistogram 求直方图的均值

本文详细介绍了如何利用OpenCV的CvHistogram结构计算直方图的均值。从理解CvHistogram的数据类型到使用cvCreateHist和cvMakeHistHeaderForArray等函数创建和操作直方图,再到实际的测试过程和代码实现,最终展示对多个直方图进行均值化的结果。通过示例代码和图像展示了直方图的统计和处理过程。
摘要由CSDN通过智能技术生成

转载请注明 t1234xy4原创 : http://blog.csdn.net/t1234xy4/article/details/51713895


相关源码下载连接:http://download.csdn.net/detail/t1234xy4/9554431

目标:利用opencv的直方图表示,求出直方图均值。

一、理解opencv直方图的数据类型

 学习连接:http://wiki.opencv.org.cn/index.php/Cv图像处理#CvHistogram

typedef struct CvHistogram
{
    int     type;
    CvArr*  bins;
    float   thresh[CV_MAX_DIM][2]; /* for uniform histograms */
    float** thresh2; /* for non-uniform histograms */
    CvMatND mat; /* embedded matrix header for array histograms */
}
CvHistogram;
bins : 用于存放直方图每个灰度级数目的数组指针,数组在cvCreateHist 的时候创建,其维数由cvCreateHist 确定(一般以一维比较常见)

bins:也就是我们对像素的分类形成的容器。这里的CvArr* 内部是void的指针,具体解释成什么类型,与使用有关。

可以看到CvHistogram 中的数据保存在CvMatND的结构体中,下面我再学习学习CvMatND。

CvMatND

多维、多通道密集数组

typedef struct CvMatND
    {
        int type; /* CvMatND 标识(CV_MATND_MAGIC_VAL), 元素类型和标号*/
        int dims; /* 数组维数 */

        int* refcount; /* 数据参考计数 */

        union
        {
            uchar* ptr;
            short* s;
            int* i;
            float* fl;
            double* db;
        } data; /* data 指针*/

        /* 每维的数据结构 (元素号,以字节为单位的元素之间的距离)是配套定义的 */
        struct
        {
            int size;
            int step;
        }
        dim[CV_MAX_DIM];

    } CvMatND;

特别注意(一维直方图):CvHistogram结构的直方图数据是保存在CvMatND中的,CvMatND结构中dims与type就不说了,struct中的size与step分别是保存在dim[0](一维直方图),二维、三维保存类推。size保存了数据空间的大小,step保存每一维数据的宽度。union data中保存了数据,我猜测是根据直方图输入的数据类型来判定使用哪一种数据指针,经过一些测试,我得到的数据保存在float* fl这个指针所指位置。(估计是默认的)如果不在你试试其他指针。


二、学会使用操作cvHistogram的函数

CreateHist

创建直方图

CvHistogram* cvCreateHist( int dims, int* sizes, int type,
                           float** ranges=NULL, int uniform=1 );
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值