1. 理论
图片的转换就是将图片中的每个像素点经过一定的变换,得到新像素点,新像素点组合成一张新的图片。
改变图片对比度和亮度的变换如下:
其中α和β被称作增益参数(gain parameter)和偏差参数(bias parameter),分别控制对比度和亮度。
2. 实现代码
使用上述公式实现改变对比度和亮度的代码如下:
void ContrastAndBrightness(const Mat& Src,Mat& Dst,double alpha,double beta) { Dst = Mat::zeros(Src.size(),Src.type()); for (int y = 0; y < Src.rows; y++) { for (int x = 0; x < Src.cols; x++) { for (int c = 0; c < 3; c++) { Dst.at<Vec3b>(y,x)[c] = saturate_cast<uchar>(alpha * (Src.at<Vec3b>(y,x)[c]) + beta); } } } namedWindow("Src Image"); namedWindow("Dst Image"); imshow("Src Image",Src); imshow("Dst Image",Dst); waitKey(); }使用OpenCV自带函数处理如下:
Src.convertTo(Dst, -1, 2.2, 20);
3. 处理结果
以下分别是alpha设置为1.5,beta设置为30时两种情况的处理结果,处理结果相差不多,但是使用时尽量调用OpenCV提供的函数。