core核心模块--改变图像对比度和亮度
来源:互联网 发布:linux修改文件时间戳 编辑:程序博客网 时间:2024/05/20 11:50
1.目的
(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
阅读全文
0 0
- core核心模块--改变图像对比度和亮度
- 改变图像的对比度和亮度
- opencv-改变图像的对比度和亮度
- 改变图像的对比度和亮度
- Class03 改变图像对比度和亮度
- 改变图像的对比度和亮度
- Android改变图像的饱和度、亮度和对比度
- 获得和改变bmp图像的亮度对比度
- 学习opencv(4)---改变图像的对比度和亮度
- opencv学习笔记9 改变图像的对比度和亮度
- OpenCV之改变图像的对比度和亮度
- Android改变图像的饱和度、亮度和对比度
- OpenCV学习:改变图像的对比度和亮度
- 改变图像的对比度和亮度-----学习记录(4)
- Opencv改变图像亮度和对比度以及优化
- OpenCV实践(3)- 改变图像的对比度和亮度
- opencv(c++)改变图像的对比度和亮度
- openCV学习笔记 (六) : 改变图像的对比度和亮度
- bootstrap-分页/标签/徽章/巨幕/页头
- GCC 编译器的一些基本操作
- 微信小程序架构分析 (中)
- leetcode Algorithms 2. Add Two Numbers
- 最大无法表示成px+qy(x>=0,y>=0)的数
- core核心模块--改变图像对比度和亮度
- 获得对象的方法以及属性
- 使用easyui增加切换子视图
- stl->deque
- 14 orangepi 内核里控制IO口
- 常用的正则表达式判断手机号邮箱等
- 四种实体类类型概念:VO、DTO、DO、PO
- 过滤IE浏览器版本
- 易错点——queue中的入队出队