zoukankan      html  css  js  c++  java
  • 数字图像的直方图均衡化(C/C++源代码)

    2004年10月14日 11:46:00

    数字图像的直方图均衡化是常用的图像增强方法,因为均衡化是自动完成的,无需人工干预,而且常常得到比较满意的结果。下面的程序是利用OPENCV提供的函数,实现这个功能。需要OPENCVB4.0的支持,在VC6下编译通过。

    //
    // perform histgram equalization for single channel image
    // AssureDigit Sample code
    //


    #include "cv.h"
    #include "highgui.h"

    #defineHDIM   256    // bin ofHIST, default = 256

    int main( int argc, char** argv )
    {
        IplImage*src = 0, *dst = 0;
        CvHistogram*hist = 0;
       
        int n =HDIM;    
        doublenn[HDIM];
        ucharT[HDIM];
        CvMat*T_mat;
       
        int x;
        int sum = 0;// sum of pixels of the source image 图像中象素点的总和
        double val =0;
       
        if( argc !=2 || (src=cvLoadImage(argv[1], 0)) == NULL)  //force to gray image
           return -1;
       
       cvNamedWindow( "source", 1 );
       cvNamedWindow( "result", 1 );
       
        // calculatehistgram 计算直方图
        hist =cvCreateHist( 1, &n, CV_HIST_ARRAY, 0, 1); 
        cvCalcHist(&src, hist, 0, 0 );
       
        // CreateAccumulative Distribute Function of histgram
        val =0;
        for ( x = 0;x < n; x++)
        {
           val = val + cvGetReal1D (hist->bins, x);
           nn[x] = val;
        }

        //Compute intensity transformation 计算变换函数的离散形式
        sum =src->height * src->width;
        for( x = 0;x < n; x++ )
        {
           T[x] = (uchar) (255 * nn[x] / sum); // range is [0,255]
        }

        // Dointensity transform for source image
        dst =cvCloneImage( src );
        T_mat =cvCreateMatHeader( 1, 256, CV_8UC1 );
        cvSetData(T_mat, T, 0);   
        // directlyuse look-up-table function 直接调用内部函数完成 look-up-table的过程
        cvLUT( src,dst, T_mat );

       cvShowImage( "source", src );
        cvShowImage("result", dst );
       cvWaitKey(0);

       cvDestroyWindow("source");
       cvDestroyWindow("result");
       cvReleaseImage( &src );
       cvReleaseImage( &dst );
       cvReleaseHist ( &hist );
       
        return0;
    }

     



    Trackback:http://tb.blog.csdn.net/TrackBack.aspx?PostId=136003


  • 相关阅读:
    VCL源码修改立即生效
    让C++控制台程序停下来,实现暂停功能
    Ubuntu系统中初次下载Android源码的一点经验
    理解SetCapture、ReleaseCapture、GetCapture(控制了消息发往哪个窗口,即消息窗口)
    又发现2个高人写的Delphi图文并茂的消息研究
    0x0118消息就是WM_SYSTIMER
    QT信号槽与Delphi事件的对比
    使用VS2005安装和编译QT4.53源码
    使用SmsManager服务群发短信
    减小VirtualBox虚拟硬盘文件的大小
  • 原文地址:https://www.cnblogs.com/feisky/p/1586546.html
Copyright © 2011-2022 走看看