opencv(10)---对比度亮度调整与通道分离与合并
来源:互联网 发布:域名备案 坏处 编辑:程序博客网 时间:2024/06/02 02:10
对比度亮度调整
原理
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();}
0 0
- opencv(10)---对比度亮度调整与通道分离与合并
- opencv对比度亮度调整与通道分离
- 【OpenCV学习笔记】十二、图像的对比度和亮度调整及图像通道的分离与合并
- 第七天:对比度亮度调整与通道分离
- opencv调整图像亮度与对比度
- opencv调整图像亮度与对比度
- OpenCV 学习记录5 图像通道分离、对比度和亮度调整
- chapter12_1对比度与亮度调整
- opencv学习笔记之调整图像的亮度与对比度
- 图像对比度与亮度调整算法实现(Python&OpenCV)
- 图像对比度与亮度调整算法实现(Python&OpenCV)
- opencv 亮度与对比度调节
- 图像处理之调整亮度与对比度
- 图像处理------调整亮度与对比度
- 图像处理之调整亮度与对比度
- OPenCV3.2 调整图像对比度与亮度
- opencv 通道分离合并
- opencv 手动调整照片颜色小工具 对比度 亮度 BGR 各通道
- 接口与抽象类
- 软件测试类型(一)
- Linux(centos6.8)下Tomcat的安装与配置
- Unreal Engin_画廊制作笔记 _011<利用PS为场景添加滤镜效果>
- Mysql 优化
- opencv(10)---对比度亮度调整与通道分离与合并
- WHERE子句使用正则表达式进行搜索过滤
- 第八单元
- java中锁的深入理解(二)
- 数据结构——基础篇
- python数据分析:pandas数据结构与操作
- 浅谈嵌入式驱动设计
- lintcode(661)Convert BST to Greater Tree
- Python学习之 logging模块的使用