opencv中直方图均衡化的小例子及详细注释
来源:互联网 发布:淘宝刷退款单有什么用 编辑:程序博客网 时间:2024/04/28 01:18
#include <cv.h>#include <highgui.h>#include <iostream>using namespace std;int main(){ /******************************************************************************************** *注意: * 必须是4个,不管是单通道图像还是多通道图像 * 因为下面有到的cvSplit和cvMerge要求是4个形参 * 实际使用中最好1个很少用到,一般是0,但是必须有。因为这一点以前不知道,调试了很久 *********************************************************************************************/ IplImage *pImageChannel[4] = { 0, 0, 0, 0 }; //创建4个单通道 IplImage *pSrcImage = cvLoadImage( "color.bmp", 1 ); //加载原图片 cout<<pSrcImage->nChannels<<endl; IplImage *pImage = cvCreateImage(cvGetSize(pSrcImage), pSrcImage->depth, pSrcImage->nChannels);//结果图片 if( pSrcImage ) { //将4个单通道设置成为原图片的大小 for( int i = 0; i < pSrcImage->nChannels; i++ ) { pImageChannel[i] = cvCreateImage( cvGetSize(pSrcImage), pSrcImage->depth, 1 ); } // 信道分离,将原图片分别赋值给4个通道 cvSplit( pSrcImage, pImageChannel[0], pImageChannel[1],pImageChannel[2], pImageChannel[3] ); //对每个单通道进行直方图均衡化 for( int i = 0; i < pImage->nChannels; i++ ) { cvEqualizeHist( pImageChannel[i], pImageChannel[i] );// 直方图均衡化 } // 信道组合,合成一张结果图 cvMerge( pImageChannel[0], pImageChannel[1], pImageChannel[2], pImageChannel[3], pImage ); //图像显示 cvShowImage("jieguo",pImage); cvWaitKey(0); // 释放资源 for( int i = 0; i < pSrcImage->nChannels; i++ ) { if ( pImageChannel[i] ) { cvReleaseImage( &pImageChannel[i] ); pImageChannel[i] = 0; } } cvReleaseImage( &pImage ); pImage = 0; }}