(代码7)直方图均衡化

11 篇文章 0 订阅
实验二(1)RGB直方图均衡化
#include <cv.h>  
#include <highgui.h>  
using namespace cv;  
int main()
{
int i;
IplImage *pImageChannel[4] = { 0, 0, 0, 0 };
IplImage *pSrcImage = cvLoadImage( "lena.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 );

	cvNamedWindow("lena");
	cvShowImage("lena",pImage);
	// 释放资源
	cvWaitKey(0);  
	cvDestroyWindow("lena");
        cvReleaseImage( pImageChannel );
	cvReleaseImage( &pImage );
}
}

/*
Split
分割多通道数组成几个单通道数组或者从数组中提取一个通道 

void cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1,CvArr* dst2, CvArr* dst3 );#define cvCvtPixToPlane cvSplit
src 
原数组. 
dst0...dst3 
目标通道 
函数 cvSplit 分割多通道数组成分离的单通道数组d。可获得两种操作模式 . 如果原数组有N通道且前N输出数组非NULL, 所有的通道都会被从原数组中提取,如果前N个通道只有一个通道非NULL函数只提取该指定通道,否则会产生一个错误,馀下的通道(超过前N个通道的以上的)必须被设置成NULL,对于设置了COI的IplImage 结使用cvCopy 也可以从图像中提取单通道。

//EqualizeHist
灰度图象直方图均衡化 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))进行图像变换。 
该方法归一化图像亮度和增强对比度。 
*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值