学习OpenCV:滤镜系列(12)——计算模式(强光)

【原文: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. }  

原图:


计算强光:


红通道:


绿通道:


蓝通道:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值