进行直方图均衡化并将直方图绘制出来,主要需要如下几个函数:
1、CVAPI(void) cvEqualizeHist( const CvArr* src, CvArr* dst );
这个函数用起来十分简单,只需要传入源图像以及已初始化的目标图像即可。
第一个参数:const CvArr* src:待处理的源图像;
第二个参数:CvArr* dst:目标图像;
在cvEqualizeHist()中,原始图像及目标图像必须是单通道,大小相同的8位图像。对于彩色图像,必须先利用cvSplite()将每个通道分开,再分别进行处理。
2、CVAPI(void) cvCvtColor( const CvArr* src, CvArr* dst, int code );
由上一个函数已知,因为我们传入的源图像必须为单通道图像,那么我们在进行其他操作之前,先将图像转换为单通道图像,即使用cvCvtColor()进行转换。
第一个参数:const CvArr* src:待处理的源图像;
第二个参数:CvArr* dst:目标图像;
第三个参数:int code:色彩空间转换的模式,该code来实现不同类型的颜色空间转换。比如CV_BGR2GRAY表示转换为灰度图,CV_BGR2HSV将图片从RGB空间转换为HSV空 间。其中当code选用CV_BGR2GRAY时,dst需要是单通道图片。当code选用CV_BGR2HSV时,对于8位图,需要将rgb值归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。
3、CV_INLINE void cvCalcHist( IplImage** image, CvHistogram* hist,
int accumulate CV_DEFAULT(0),
const CvArr* mask CV_DEFAULT(NULL) )<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
第一个参数:Iplimage** image:输入图像 (也可以使用 CvMat** ).
第二个参数:CvHistogram* hist::直方图指针
第三个参数:int accumulate:累计标识。如果设置,则直方图在开始时不被清零。这个特征保证可以为多个图像计算一个单独的直方图,或者在线更新直方图。
第四个参数:const CvArr* mask:操作 mask, 确定输入图像的哪个象素被计数 函数 cvCalcHist 计算单通道或多通道图像的直方图。 用来增加直方块的数组元素可从相应输入图