OpenCV图像处理---调整图像亮度与对比度

理论:

  • 图像变换可以看作如下:
    • 像素变换 – 点操作
    • 邻域操作 – 区域

调整图像亮度和对比度属于像素变换-点操作
g(i,j) = αf(i,j) +β (其中 α>0 ,α 增益(放大倍数),用来控制图像的对比度,β (偏置),用控制图像的亮度

参考代码:

#include 
#include 

using namespace std;
using namespace cv;

int main (int argc,char **argv)
{
	Mat src = imread("/home/shining/工作/Opencv-test/picture/01.jpg");
	if(src.empty())
	{
		cout << "Could not load image"<(row,col);
				dst.at(row,col) = saturate_cast(alpha*v + beta);
			}
			else if(channel == 3)
			{
				int b = src.at(row,col)[0];
				int g = src.at(row,col)[1];
				int r = src.at(row,col)[2];
				dst.at(row, col)[0] = saturate_cast(alpha*b + beta);//调整对比度与亮度,公式: g(i,j) = α*f(i,j)+β  其中 α>0, β是增益变量
                dst.at(row, col)[1] = saturate_cast(alpha*g + beta);//图像越亮,颜色值越往255靠近
                dst.at(row, col)[2] = saturate_cast(alpha*r + beta);//对比度: 就是两个像素点之间的差值,差值越大对比度越高,反之越低

				float f_b = convert.at(row, col)[0];
                float f_g = convert.at(row, col)[1];
                float f_r = convert.at(row, col)[2];

				dst_convert.at(row, col)[0] = saturate_cast(alpha*f_b + beta);//用float计算会比uchar精度高一些,值会大一点点
                dst_convert.at(row, col)[1] = saturate_cast(alpha*f_g + beta);
                dst_convert.at(row, col)[2] = saturate_cast(alpha*f_r + beta);

			}
		}
	}

	imshow("dst_Image",dst);
	imshow("dst_convert Image",dst_convert);
	waitKey(0);
	return 0;
}

你可能感兴趣的:(OpenCV图像处理---调整图像亮度与对比度)