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;    }}
原创粉丝点击