亮度和对比度的调整原理
公式原理: new_image = a*image + beta 即
g(x)=αf(x)+β
其中,α>0 , β 通常被称为 gain 或者 bias 参数,通常这两个参数可以独立的分别控制图像的对比度和亮度。
f(x) 为原图像的像素值,g(x) 为输出图像的像素值。比较直白的表达式为:
g(i,j)=α⋅f(i,j)+β
其中 i 和 j 表示位于图像的第 i 行和第 j 列.
一下代码执行的公式为: g(i,j)=α⋅f(i,j)+β
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; double alpha; /*< Simple contrast control */ int beta; /*< Simple brightness control */ int main( int argc, char** argv ) { Mat image = imread( argv[1] ); Mat new_image = Mat::zeros( image.size(), image.type() ); 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; 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 ); } } } namedWindow("Original Image", 1); namedWindow("New Image", 1); imshow("Original Image", image); imshow("New Image", new_image); waitKey(); return 0; }
结果
- 运行代码的参数:α=2.2 , β=50
$ ./BasicLinearTransforms lena.jpgBasic Linear Transforms-------------------------* Enter the alpha value [1.0-3.0]: 2.2* Enter the beta value [0-100]: 50
-
结果如下: