赞
踩
不管计算几维的直方图,用的都是calcHist函数。
C++原型: void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=false )
参数详解:
onst Mat* images:输入图像
int nimages:输入图像的个数
const int* channels:通道索引
InputArray mask:掩膜
OutputArray hist:输出的直方图数组
int dims:直方图的维度
const int* histSize:存放每个维度的直方图的数组
const float** ranges: 每一维度数值的取值范围
bool uniform=true::是否对得到的直方图数组进行归一化处理(是否均匀)
bool accumulate=false:在多个图像时,是否累计计算像素值得个数
二维直方图实例:
//初始化直方图参数 const int channels[2] = { 0,1 }; const int histSize[] = { 256,256 }; float pranges[] = { 0, 256 }; float pranges1[] = { 0, 256 }; const float * ranges[] = { pranges,pranges1 }; Mat hist; //计算直方图 calcHist(&pic_c, //输入的图片 1, //表示输入一张图片 channels,//表示使用图片的哪几个通道,{ 0,1 }就表示用通道0和通道1 Mat(),//不使用掩模 hist, //得到的直方图结果 2, //表示二维 histSize,//表示每个维度的尺寸 ranges, //表示每个维度的尺寸,{pranges,pranges1}就表示第一个维度是0`255,第二个维度是0~255 true,//指示直方图是否均匀的标识符, true表示均匀的直方图 false);//累计标识符, false表示直方图在配置阶段会被清零
用了merge将想要使用的两个单通道的图像合成到一个图片上,就是代码里面的pic_c,然后用channels[2] = { 0,1 }表示使用了这个合成图像的0通道和1通道。
效果图(hist直接用imshow就行了):
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。