學習OpenCV:濾鏡系列(12)——計算模式(強光)

查志強發表於2014-11-25

【原文:http://blog.csdn.net/yangtrees/article/details/9206967

==============================================

版權所有:小熊不去實驗室CSDN部落格

==============================================


R(上)>127.5

R=R(下)+(255-R(下))*(R(上)-127.5)/127.5;

R(上)<127.5

R=R(下)-R(下)*(127.5-R(上))/127.5=(R(上)*R(下))/127.5;


  1. #include <math.h>  
  2. #include <opencv/cv.h>  
  3. #include <opencv/highgui.h>  
  4.   
  5. using namespace cv;  
  6. using namespace std;  
  7.   
  8. int R=11;  
  9.   
  10. int main()  
  11. {  
  12.     Mat src = imread("D:/img/liushishi02.jpg",1);  
  13.     imshow("src",src);  
  14.     int width=src.cols;  
  15.     int heigh=src.rows;  
  16.     Mat img;  
  17.     src.copyTo(img);  
  18.   
  19.     Mat dst(img.size(),CV_8UC3);  
  20.     Mat dst1u[3];  
  21.   
  22.   
  23.     float tmp,r;  
  24.     for (int y=0;y<heigh;y++)  
  25.     {  
  26.         uchar* imgP=img.ptr<uchar>(y);  
  27.         uchar* dstP=dst.ptr<uchar>(y);  
  28.         for (int x=0;x<width;x++)  
  29.         {  
  30.             r = (float)imgP[3*x];  
  31.             if(r>127.5)  
  32.                 tmp = r+(255-r)*(r-127.5)/127.5;  
  33.             else  
  34.                 tmp = r*r/127.5;  
  35.             tmp=tmp>255?255:tmp;  
  36.             tmp=tmp<0?0:tmp;  
  37.             dstP[3*x]=(uchar)(tmp);  
  38.   
  39.             r = (float)imgP[3*x+1];  
  40.             if(r>127.5)  
  41.                 tmp = r+(255-r)*(r-127.5)/127.5;  
  42.             else  
  43.                 tmp = r*r/127.5;  
  44.             tmp=tmp>255?255:tmp;  
  45.             tmp=tmp<0?0:tmp;  
  46.             dstP[3*x+1]=(uchar)(tmp);  
  47.   
  48.             r = (float)imgP[3*x+2];  
  49.             if(r>127.5)  
  50.                 tmp = r+(255-r)*(r-127.5)/127.5;  
  51.             else  
  52.                 tmp = r*r/127.5;  
  53.             tmp=tmp>255?255:tmp;  
  54.             tmp=tmp<0?0:tmp;  
  55.             dstP[3*x+2]=(uchar)(tmp);  
  56.         }  
  57.     }  
  58.     imshow("強光",dst);  
  59.       
  60.     split(dst,dst1u);  
  61.     imshow("綠通道強光",dst1u[1]);  
  62.   
  63.     waitKey();  
  64.     imwrite("D:/img/強光.jpg",dst);  
  65.     imwrite("D:/img/強光_藍通道.jpg",dst1u[0]);  
  66.     imwrite("D:/img/強光_綠通道.jpg",dst1u[1]);  
  67.     imwrite("D:/img/強光_紅通道.jpg",dst1u[2]);  
  68.   
  69. }  

原圖:


計算強光:


紅通道:


綠通道:


藍通道:


相關文章