opencv学习之路(9)、对比度亮度调整与通道分离

一、对比度亮度调整

 1 #include<opencv2/opencv.hpp>
 2 using namespace cv;
 3 
 4 #define WIN_NAME "输出图像"
 5 Mat src,dst;
 6 int contrast=20,bright=20;
 7 
 8 void onChange(int,void*){
 9     for (int i = 0; i < src.rows; i++)
10     {
11         for (int j = 0; j < src.cols; j++)
12         {
13             //saturate_cast<uchar>    溢出保护:if(data<0) data=0;    if(data>255) data=255;
14             dst.at<Vec3b>(i,j)[0]=saturate_cast<uchar>(src.at<Vec3b>(i,j)[0]*contrast*0.01+bright);
15             dst.at<Vec3b>(i,j)[1]=saturate_cast<uchar>(src.at<Vec3b>(i,j)[1]*contrast*0.01+bright);
16             dst.at<Vec3b>(i,j)[2]=saturate_cast<uchar>(src.at<Vec3b>(i,j)[2]*contrast*0.01+bright);
17         }
18     }
19     imshow("原图",src);
20     imshow(WIN_NAME,dst);
21 }
22 
23 void main(){
24     src=imread("E://1.jpg");
25     dst=Mat::zeros(src.size(),src.type());
26     //Mat::zeros();//将矩阵元素置为0
27     //Mat::ones();//置1
28     namedWindow(WIN_NAME,CV_WINDOW_AUTOSIZE);
29     createTrackbar("对比度",WIN_NAME,&contrast,300,onChange,0);
30     createTrackbar("亮  度",WIN_NAME,&bright,200,onChange,0);
31 
32     onChange(contrast,0);//回调函数初始化
33     onChange(bright,0);
34 
35     waitKey(0);
36 
37 }

二、通道分离与合并

 1 #include<opencv2/opencv.hpp>
 2 using namespace cv;
 3 
 4 void main(){
 5     Mat img=imread("E://2.jpg");
 6     Mat dst;
 7     vector<Mat>channels;//定义Mat类型的向量
 8 
 9     split(img,channels);//通道分离
10     Mat blue=channels.at(0);
11     Mat green=channels.at(1);
12     Mat red=channels.at(2);
13 
14     threshold(blue,blue,200,255,THRESH_BINARY);//二值化:大于200的赋值255,小于200的赋值0
15     threshold(green,green,200,255,THRESH_BINARY);
16     threshold(red,red,200,255,THRESH_BINARY);
17 
18     merge(channels,dst);//通道合并
19 
20     imshow("原图",img);
21     imshow("blue",blue);
22     imshow("green",green);
23     imshow("red",red);
24     imshow("dst",dst);
25     waitKey(0);
26 }

 

posted @ 2017-07-19 19:25  进击的小猴子  阅读(2031)  评论(0编辑  收藏  举报