OpenCV 利用滚动条调整图像亮度


OpenCV 利用滚动条调整图像亮度:

  1. /************************************************************************/  
  2. /* 亮度调整                                              */  
  3. /************************************************************************/  
  4.   
  5. IplImage*transimg,*srcimg;  
  6. int bright2adj;  
  7.   
  8. void re_adjust_bright(int)  
  9. {  
  10.     assert(srcimg != NULL);  
  11.     assert(transimg != NULL);  
  12.     int x,y,i;  
  13.     if(srcimg->nChannels==3)  
  14.     {  
  15.         for (i = 0; i < 3; i++)//彩色图像需要处理3个通道,灰度图像这里可以删掉   
  16.             for (y = 0; y < srcimg->height; y++)  
  17.                 for (x = 0; x < srcimg->width; x++)  
  18.                 {  
  19.                     float val = ((uchar*)(srcimg->imageData + srcimg->widthStep*y))[x*3+i];  
  20.                     val+=bright2adj;  
  21.                     if(val<0)    val=0;  
  22.                     else if(val>255) val=255;  
  23.                     ((uchar*)(transimg->imageData + transimg->widthStep*y))[x*3+i] = (uchar)val;  
  24.                 }  
  25.     }  
  26.     else  
  27.     {  
  28.         for (y = 0; y < srcimg->height; y++)  
  29.             for (x = 0; x < srcimg->width; x++)  
  30.             {  
  31.                 float val = ((uchar*)(srcimg->imageData + srcimg->widthStep*y))[x];  
  32.                 val+=bright2adj;  
  33.                 if(val<0)    val=0;  
  34.                 else if(val>255) val=255;  
  35.                 ((uchar*)(transimg->imageData + transimg->widthStep*y))[x] = (uchar)val;  
  36.             }  
  37.     }         
  38.     cvShowImage("image",transimg);  
  39. }  
  40.   
  41. void on_mouse3(int event,int x,int y,int flags,void* param)  
  42. {  
  43.     if(event==CV_EVENT_LBUTTONUP)  
  44.         re_adjust_bright(0);  
  45. }  
  46.   
  47. void CCVMFCView::OnAdjustBrightness()  
  48. {  
  49.     srcimg=cvCloneImage(workImg);  
  50.     cvFlip(srcimg);  
  51.     transimg=cvCloneImage(srcimg);    
  52.   
  53.     cvNamedWindow("image",CV_WINDOW_AUTOSIZE);    
  54.     cvCreateTrackbar("亮度""image", &bright2adj, 255,re_adjust_bright);  
  55.     //re_adjust_bright(0);   
  56.     cvShowImage("image",srcimg);  
  57.   
  58.     cvSetMouseCallback("image",on_mouse3,0);  
  59.   
  60.     cvWaitKey(0);  
  61.     cvDestroyWindow("image");  
  62.     cvReleaseImage(&srcimg);  
  63.     cvFlip(transimg);  
  64.     m_dibFlag=imageReplace(transimg,&workImg);  
  65.   
  66.     m_ImageType=2;  
  67.     Invalidate();  
  68. }  

相关内容