图像亮度、对比度调节

  1. #include "cv.h"   
  2. #include "highgui.h"   
  3. #include    
  4. int ImageAdjust(IplImage *src,IplImage *dst,   
  5.                 double low,double high,        //x direction   
  6.                 double bottom,double top,    //y direction   
  7.                 double gamma);   
  8. int main(void)   
  9. {   
  10.     char *filename="lena.jpg";   
  11.     IplImage *dst,*src = /blog.armyourlife.info/cvLoadImage(filename,0);   
  12.     if(!src)   
  13.     {   
  14.         printf("Couldn't seem to Open %s, sorry/n",filename);   
  15.         return -1;   
  16.     }   
  17.       
  18.   cvNamedWindow( "src", 1 );   
  19.     cvNamedWindow( "result", 1 );   
  20.       
  21.     // Image adjust   
  22.     dst = cvCloneImage(src);   
  23.     // 输入参数 [0,0.5] 和 [0.5,1], gamma=1   
  24.     if( ImageAdjust( src, dst, 0, 0.5, 0.5, 1, 1)!=0)   
  25.         return -1;   
  26.       
  27.     cvShowImage( "src", src );   
  28.     cvShowImage( "result", dst );   
  29.     cvWaitKey(0);   
  30.     cvDestroyWindow("src");   
  31.     cvDestroyWindow("result");   
  32.     cvReleaseImage( &src );   
  33.     cvReleaseImage( &dst );   
  34.       
  35.     return 0;   
  36. }   
  37. int ImageAdjust(IplImage* src, IplImage* dst,   
  38.         double low, double high,   // X方向:low and high are the intensities of src   
  39.         double bottom, double top, // Y方向:mapped to bottom and top of dst   
  40.         double gamma )   
  41. {   
  42.     double low2 = low*255;   
  43.     double high2 = high*255;   
  44.     double bottom2 = bottom*255;   
  45.     double top2 = top*255;   
  46.     double err_in = high2 - low2;   
  47.     double err_out = top2 - bottom2;   
  48.     int x,y;   
  49.     double val;   
  50.     if(low<0 && low>1 && high <0 && high>1&&   
  51.     bottom<0 && bottom>1 && top<0 && top>1 && low>high)   
  52.         return -1;   
  53.       // intensity transform   
  54.     for( y = 0; y < src->height; y++)   
  55.     {   
  56.         for (x = 0; x < src->width; x++)   
  57.         {   
  58.             val = ((uchar*)(src->imageData + src->widthStep*y))[x];   
  59.             val=pow((val - low2)/err_in, gamma)*err_out+bottom2;   
  60.             if(val>255)   
  61.                 val=255;   
  62.             if(val<0)   
  63.                 val=0; // Make sure src is in the range [low,high]   
  64.             ((uchar*)(dst->imageData + dst->widthStep*y))[x] = (uchar) val;   
  65.         }   
  66.     }   
  67.     return 0;   
  68. }  

你可能感兴趣的:(OpenCV)