opencv(10)---对比度亮度调整与通道分离与合并
2017-05-03 20:47
375 查看
对比度亮度调整
原理
g(x)=a*f(x)+b;
其中,a用于控制对比度,b用于控制亮度
代码
#include "mainwindow.h" #include <QApplication> #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; #define WIN_NAME "输出图像" Mat srcImg; Mat dstImg; int Contrase_Value = 20; int Bright_Value = 20; void OnChange(int, void*) { for(int i = 0; i<srcImg.rows; i++) { for(int j = 0; j<srcImg.cols; j++) { dstImg.at<Vec3b>(i, j)[0] = saturate_cast<uchar>(Contrase_Value * 0.01 * srcImg.at<Vec3b>(i, j)[0] + Bright_Value); dstImg.at<Vec3b>(i, j)[1] = saturate_cast<uchar>(Contrase_Value * 0.01 * srcImg.at<Vec3b>(i, j)[1] + Bright_Value); dstImg.at<Vec3b>(i, j)[2] = saturate_cast<uchar>(Contrase_Value * 0.01 * srcImg.at<Vec3b>(i, j)[2] + Bright_Value); } } imshow("原图", srcImg); imshow(WIN_NAME, dstImg); } int main(int argc, char *argv[]) { QApplication a(argc, argv); srcImg = imread("D:\\LearningOpenCV\\Lesson12\\1.jpg"); if(srcImg.empty()){ return 0; } dstImg = Mat::zeros(srcImg.size(), srcImg.type()); namedWindow(WIN_NAME, CV_WINDOW_AUTOSIZE); createTrackbar("contrase_value", WIN_NAME, &Contrase_Value, 300, OnChange, 0); createTrackbar("Bright_value", WIN_NAME, &Bright_Value, 200, OnChange, 0); OnChange(Contrase_Value, 0); //回调函数初始化 OnChange(Bright_Value, 0); waitKey(0); return a.exec(); }
知识点讲解
1.ones用于初始化一个固定大小和类型且初始化所有值都为1的矩阵
dstImg=Mat::ones(srcImg.size(),srcImg.type());
2. zeros
用于初始化一个固定大小和类型且初始化所有值都为0的矩阵
dstImg = Mat::zeros(srcImg.size(), srcImg.type());
3.onChange
下面的代码用于初始化
OnChange(Contrase_Value, 0); //回调函数初始化 OnChange(Bright_Value, 0);
4. saturate_cast
该函数用于限定取值范围
相当于下列代码
//溢出保护 if(data<0) data=0; else if(data>255) data=255;
用法
dstImg.at<Vec3b>(i, j)[0] = saturate_cast<uchar>(Contrase_Value * 0.01 * srcImg.at<Vec3b>(i, j)[0] + Bright_Value);
通道分离—-split
通道分离以后的图像为灰度图,图像某位置越白,说明灰度值越大,说明原图中某一通道的值越大代码
#include "mainwindow.h" #include <QApplication> #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main(int argc, char *argv[]) { QApplication a(argc, argv); Mat img=imread("D:\\1\\1.png"); if(img.empty()){ cout<<"error this image!"<<endl; return 0; } vector<Mat> channels; Mat blueChannel=channels.at(0); Mat greenChannel=channels.at(1); Mat redChannel=channels.at(2); imshow("originalImage",img); imshow("blueChannel",blueChannel); imshow("greenChannel",greenChannel); imshow("redChannel",redChannel); return a.exec(); }
知识点讲解
黄色是由绿色和红色通道进行叠加的。所以,原图中显示为黄色的地方,在绿色通道和红色通道中都是显示为白色的。通道合并
#include "mainwindow.h" #include <QApplication> #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main(int argc, char *argv[]) { QApplication a(argc, argv); Mat img=imread("D:\\1\\1.png"); Mat dstImage; if(img.empty()){ cout<<"error this image!"<<endl; return 0; } vector<Mat> channels; Mat blueChannel=channels.at(0); Mat greenChannel=channels.at(1); Mat redChannel=channels.at(2); imshow("originalImage",img); imshow("blueChannel",blueChannel); imshow("greenChannel",greenChannel); imshow("redChannel",redChannel); //合并通道 merge(channels,dstImage); return a.exec(); }
相关文章推荐
- 【OpenCV学习笔记】十二、图像的对比度和亮度调整及图像通道的分离与合并
- OpenCV 学习记录5 图像通道分离、对比度和亮度调整
- opencv 手动调整照片颜色小工具 对比度 亮度 BGR 各通道
- 第七天:对比度亮度调整与通道分离
- 【OpenCV_10】 创建滑动条Trackbar & 图像对比度、亮度值调整
- OpenCV Python教程之图像元素的访问、通道分离与合并
- opencv从零开始——3. 了解通道,对比度,亮度
- OpenCV Python教程(2、图像元素的访问、通道分离与合并)
- 基于OpenCV调整图像的对比度和亮度
- OPenCV3.2 调整图像对比度与亮度
- opencv之split和merge分离通道和合并多通道的用法
- OpenCV实践之路——TrackBar调整图像的亮度和对比度(OpenCV1和OpenCV2两种版本)
- OpenCV Python教程(2、图像元素的访问、通道分离与合并)
- 【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整
- OpenCV-调整图像的对比度、亮度
- OpenCV------创建Trackbar & 图像对比度、亮度值调整
- 【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整
- OpenCV Python教程(2、图像元素的访问、通道分离与合并)
- [OpenCV]访问图像中的像素调整对比度亮度
- opencv学习笔记-4、调整图像亮度和对比度