您的位置:首页 > 运维架构

OpenCV中cvEqualizeHist实现灰度图象直方图均衡化

2011-08-31 21:06 387 查看
 
灰度图象直方图均衡化

void cvEqualizeHist( const CvArr* src, CvArr* dst );

src 输入的 8-比特 单信道图像 dst 输出的图像与输入图像大小与数据类型相同 函数 cvEqualizeHist 采用如下法则对输入图像进行直方图均衡化:

计算输入图像的直方图 H
直方图归一化,因此直方块和为255
计算直方图积分:
采用H'作为查询表:dst(x,y)=H'(src(x,y))进行图像变换。
该方法归一化图像亮度和增强对比度。

例:彩色图像的直方图均衡化

int i;
IplImage *pImageChannel[4] = { 0, 0, 0, 0 };
pSrcImage = cvLoadImage( "test.jpg", 1 ) ;
IplImage *pImage = cvCreateImage(cvGetSize(pSrcImage), pSrcImage->depth, pSrcImage->nChannels);
if( pSrcImage )
{
for( i = 0; i < pSrcImage->nChannels; i++ )
{
pImageChannel[i] = cvCreateImage( cvGetSize(pSrcImage), pSrcImage->depth, 1 );
}
// 信道分离
cvSplit( pSrcImage, pImageChannel[0], pImageChannel[1],
pImageChannel[2], pImageChannel[3] );
for( i = 0; i < pImage->nChannels; i++ )
{
// 直方图均衡化
cvEqualizeHist( pImageChannel[i], pImageChannel[i] );
}
// 信道组合
cvMerge( pImageChannel[0], pImageChannel[1], pImageChannel[2],
pImageChannel[3], pImage );
// ……图像显示代码(略)
// 释放资源
for( i = 0; i < pSrcImage->nChannels; i++ )
{
if ( pImageChannel[i] )
{
cvReleaseImage( pImageChannel[i] );
pImageChannel[i] = 0;
}
}
cvReleaseImage( pImage );
pImage = 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dst