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

 

灰度图象直方图均衡化

void cvEqualizeHist( const CvArr* src, CvArr* dst );
src
输入的 8-比特 单信道图像
dst
输出的图像与输入图像大小与数据类型相同

函数 cvEqualizeHist 采用如下法则对输入图像进行直方图均衡化:

  1. 计算输入图像的直方图 H
  2. 直方图归一化,因此直方块和为255
  3. 计算直方图积分:
  4. 采用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;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值