织梦CMS - 轻松建站从此开始!

罗索

数字图像的直方图均衡化(C/C++源代码)

jackyhwei 发布于 2010-04-19 11:20 点击:次 
数字图像的直方图均衡化是常用的图像增强方法,因为均衡化是自动完成的,无需人工干预,而且常常得到比较满意的结果。下面的程序是利用OPENCV提供的函数,实现这个功能。
TAG:

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

  1. // 
  2. // perform histgram equalization for single channel image 
  3. // AssureDigit Sample code 
  4. // 
  5.  
  6.  
  7. #include "cv.h" 
  8. #include "highgui.h" 
  9.  
  10. #define HDIM    256    // bin of HIST, default = 256 
  11.  
  12. int main( int argc, char** argv ) 
  13.     IplImage *src = 0, *dst = 0; 
  14.     CvHistogram *hist = 0; 
  15.     
  16.     int n = HDIM;     
  17.     double nn[HDIM]; 
  18.     uchar T[HDIM]; 
  19.     CvMat *T_mat; 
  20.     
  21.     int x; 
  22.     int sum = 0; // sum of pixels of the source image 图像中象素点的总和 
  23.     double val = 0; 
  24.     
  25.     if( argc != 2 || (src=cvLoadImage(argv[1], 0)) == NULL)  // force to gray image 
  26.         return -1; 
  27.     
  28.     cvNamedWindow( "source", 1 ); 
  29.     cvNamedWindow( "result", 1 ); 
  30.     
  31.     // calculate histgram 计算直方图 
  32.     hist = cvCreateHist( 1, &n, CV_HIST_ARRAY, 0, 1 );  
  33.     cvCalcHist( &src, hist, 0, 0 ); 
  34.     
  35.     // Create Accumulative Distribute Function of histgram 
  36.     val = 0; 
  37.     for ( x = 0; x < n; x++) 
  38.     { 
  39.         val = val + cvGetReal1D (hist->bins, x); 
  40.         nn[x] = val; 
  41.     } 
  42.  
  43.     // Compute intensity transformation 计算变换函数的离散形式 
  44.     sum = src->height * src->width; 
  45.     for( x = 0; x < n; x++ ) 
  46.     { 
  47.         T[x] = (uchar) (255 * nn[x] / sum); // range is [0,255] 
  48.     } 
  49.  
  50.     // Do intensity transform for source image 
  51.     dst = cvCloneImage( src ); 
  52.     T_mat = cvCreateMatHeader( 1, 256, CV_8UC1 ); 
  53.     cvSetData( T_mat, T, 0 );    
  54.     // directly use look-up-table function 直接调用内部函数完成 look-up-table 的过程 
  55.     cvLUT( src, dst, T_mat ); 
  56.  
  57.     cvShowImage( "source", src ); 
  58.     cvShowImage( "result", dst ); 
  59.     cvWaitKey(0); 
  60.  
  61.     cvDestroyWindow("source"); 
  62.     cvDestroyWindow("result"); 
  63.     cvReleaseImage( &src ); 
  64.     cvReleaseImage( &dst ); 
  65.     cvReleaseHist ( &hist ); 
  66.     
  67.     return 0; 

 

(hunnish)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201004/9175.html]
本文出处:CSDN博客 作者:hunnish
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容