core核心模块--改变图像对比度和亮度
2017-06-06 10:47
260 查看
1.目的
(1)访问像素值
(2)用0初始化矩阵
(3)saturate_cast作用
(4)像素变换的内容
2.图像处理
一般来说,图像变换可以分为两种:点算子和临域算子
(1)点算子
PS:alpha为增益,beta为偏置。
(2)临域算子
临域算子是通过像素临域内的像素值来改变像素值,可以使用掩码操作(http://blog.csdn.net/nnuyi/article/details/72870532)
3.代码实现
(1)个人实现
(2)调用openCV API
(3)完整代码
参考文献
1.http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/basic_linear_transform/basic_linear_transform.html#basic-linear-transform
(1)访问像素值
(2)用0初始化矩阵
(3)saturate_cast作用
(4)像素变换的内容
2.图像处理
一般来说,图像变换可以分为两种:点算子和临域算子
(1)点算子
PS:alpha为增益,beta为偏置。
(2)临域算子
临域算子是通过像素临域内的像素值来改变像素值,可以使用掩码操作(http://blog.csdn.net/nnuyi/article/details/72870532)
3.代码实现
(1)个人实现
void Convert(const Mat& src, Mat& result, double alpha, double beta){ int channels = src.channels(); int rows = src.rows; int cols = src.cols; result.create(src.size(), src.type()); for(int i = 0; i<rows; i++) for(int j=0; j<cols; j++) for(int k=0; k<channels; k++){ //saturate_cast<rtype>对计算结果进行转换,避免像素值超出单位 result.at<Vec3b>(i,j)[k] = saturate_cast<uchar>(alpha*src.at<Vec3b>(i,j)[k]+beta); } }
(2)调用openCV API
/** convertTo函数参数解释: result:结果矩阵 -1:目标矩阵类型,或者在当前通道数与源矩阵通道数相同的情况下的depth,如果为负数,则目标矩阵与源矩阵类型相同 alpha:增益(缩放倍数) beta:偏置 */ src.convertTo(result, -1, alpha, beta);
(3)完整代码
#include<iostream>
using namespace std;
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
void Convert(const Mat& src, Mat& result, double alpha, double beta){ int channels = src.channels(); int rows = src.rows; int cols = src.cols; result.create(src.size(), src.type()); for(int i = 0; i<rows; i++) for(int j=0; j<cols; j++) for(int k=0; k<channels; k++){ //saturate_cast<rtype>对计算结果进行转换,避免像素值超出单位 result.at<Vec3b>(i,j)[k] = saturate_cast<uchar>(alpha*src.at<Vec3b>(i,j)[k]+beta); } }
int main(int argc, char** argv){
cout << argc << endl;
if(argc < 2){
cout << "more parameters are required!!!" << endl;
return(-1);
}
double alpha,beta;
cout << "Input alpha:" << endl;
cin >> alpha;
cout << "Input beta:" << endl;
cin >> beta;
Mat src = imread(argv[1]);
if(!src.data){
cout << "error to read image!!!" << endl;
return(-1);
}
/*
convertTo函数参数解释:
result:结果矩阵
-1:目标矩阵类型,或者在当前通道数与源矩阵通道数相同的情况下的depth,如果为负数,则目标矩阵与源矩阵类型相同
alpha:增益(缩放倍数)
beta:偏置
Mat result = Mat::zeros(src.size(), src.type());
src.convertTo(result, -1, alpha, beta);
*/
Mat result;
Convert(src, result, alpha, beta);
namedWindow("original image");
imshow("original image", src);
namedWindow("new image");
imshow("new image", result);
waitKey(0);
return(0);
}
参考文献
1.http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/basic_linear_transform/basic_linear_transform.html#basic-linear-transform
相关文章推荐
- 十七.HTTP核心模块(ngx_http_core_module)
- OpenCV(四) Opencv中 core 核心模块详解—— Mat类(二)之常见函数及操作
- OpenCV学习笔记6 OpenCV核心模块与核心功能Core Module & Core Functionality(五)
- 示例程序020--改变图像对比度和亮度
- Class03 改变图像对比度和亮度
- OpenCV学习笔记3 OpenCV核心模块与核心功能Core Module & Core Functionality(二)
- OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))
- nginx核心模块ngx_core_module分析
- jQuery 1.8源码分析 core.js核心模块 jQuery对象的构造分析
- OpenCV之core 模块. 核心功能(2)基本绘图 随机数发生器&绘制文字 离散傅立叶变换 输入输出XML和YAML文件 与 OpenCV 1 同时使用
- core核心模块--输入输出XML和YAML文件
- Core Architecture Blocks (核心架构模块)(二)
- 源代码阅读方法 jQuery源码解析 核心模块core.js
- core核心模块--随机数发生器&文字绘制
- OpenCV(六) Opencv中 core 核心模块详解——访问图像像素的几种方法
- OpenCV(七) Opencv中 core 核心模块详解—提取感兴趣区域Roi
- Nginx HTTP核心模块(HTTP Core)指令和内置变量中文说明
- 基础学习笔记之opencv(12):改变图像对比度和亮度
- OpenCV学习笔记4 OpenCV核心模块与核心功能Core Module & Core Functionality(三)
- HTTP核心模块(HTTP Core)