OpenCV 基于RGB三原色的基本线性变换 改变图像颜色和亮度 对比度增强算法
2015-04-03 14:11
381 查看
1、理论依据
书籍:Computer Vision: Algorithms and Applications作者:Richard Szeliski
2、改变图像亮度和对比度的原理
这里的图像颜色的调整是基于RGB三原色的,在OpenCV中(255,255,255)指的是白色,(0,0,0)为黑色,可以大致理解为值越大颜色越亮。这里采用的力量公式为:
g(x)=αf(x)+βg(x)=\alpha f(x)+\beta
其中α>0\alpha >0表示增益,β\beta表示偏移量。
离散到图像中的每个像素即为:
g(i,j)=α⋅f(i,j)+βg(i,j)=\alpha\cdot f(i,j)+\beta
i,ji,j分别表示图像的行和列
3、代码实现
#include <cv.h> #include <highgui.h> #include <iostream> using namespace cv; double alpha; /**< Simple contrast control */ int beta; /**< Simple brightness control */ int main( int argc, char** argv ) { /// Read image given by user Mat image = imread( argv[1] ); Mat new_image = Mat::zeros( image.size(), image.type() ); /// Initialize values std::cout<<" Basic Linear Transforms "<<std::endl; std::cout<<"-------------------------"<<std::endl; std::cout<<"* Enter the alpha value [1.0-3.0]: ";std::cin>>alpha; std::cout<<"* Enter the beta value [0-100]: "; std::cin>>beta; /// Do the operation new_image(i,j) = alpha*image(i,j) + beta for( int y = 0; y < image.rows; y++ ) { for( int x = 0; x < image.cols; x++ ) { for( int c = 0; c < 3; c++ ) { new_image.at<Vec3b>(y,x)[c] = saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta ); } } } /// Create Windows namedWindow("Original Image", 1); namedWindow("New Image", 1); /// Show stuff imshow("Original Image", image); imshow("New Image", new_image); /// Wait until user press some key waitKey(); return 0; }
ps:
1.
image.at<Vec3b>(y,x)[c],y表示行,x表示列,c为R,G,B(即0,1,2)
2. saturate_cast用来保证运算后的值范围在uchar内。
3. OpenCV库中有自带的图像处理函数可以完成这一任务
image.convertTo(new_image, -1, alpha, beta);
convertTo函数的功能就是完成new_image = a*image + beta的运算,且具有更高效率。
4、结果
输入:α=2.2\alpha=2.2 β=50\beta=50原文出自OpenCV官网英文文档,笔记记录了对比度增强算法的相关知识点。
相关文章推荐
- 基于多尺度对比度x射线图像增强算法
- OpenCV学习:改变图像的对比度和亮度
- opencv c++函数 基础5 改变图像的对比度和亮度
- OpenCV之改变图像的对比度和亮度
- Opencv学习笔记(2)模块,图像读取、显示、叠加、融合、颜色分离、亮度、对比度
- 眼底图像血管增强与分割--(4)基于自适应对比度增强算法实现
- openCV学习笔记 (六) : 改变图像的对比度和亮度
- 基于多尺度对比度x射线图像增强算法2
- opencv(c++)改变图像的对比度和亮度
- 学习OpenCV(四) 改变图像的对比度和亮度——像素变换
- OpenCV实践(3)- 改变图像的对比度和亮度
- Opencv图像识别从零到精通(9)----对比度亮度改变
- 基于优化对比度增强的图像去雾算法
- Opencv改变图像亮度和对比度以及优化
- 学习OpenCV(四) 改变图像的对比度和亮度——像素变换
- 基于局部标准差的图像局部对比度增强算法
- 【opencv】 改变图像的对比度和亮度的两种方法
- opencv学习笔记9 改变图像的对比度和亮度
- 基于局部均方差的图像局部对比度增强算法
- 基于小波变换的图像对比度增强算法http://blog.csdn.net/ebowtang/article/details/50477720