理论依据
首先了解一下算子的概念。一般的图像处理算子都是一个函数,它接受一个或多个输入图像,并产生输出图像。下面是算子的一般形式:
或者
图像亮度和对比度的次奥做属于图像变换中比较简单的点操作(pointoprators)。点操作有一个特点:仅仅根据输入像素值(有时会加上某些全局信息或参数),来计算相应的输出像素值。这类算子包括亮度(brightness)和对比度(contrast)调整、颜色校正(colorcorrection)和变换(transformations)。
两种常用的点操作(点算子):(1)乘上一个常数(对应对比度的调节);(2)加上一个常数(对应亮度值的调节)。对应公式如下:
参数说明:
- 参数f(x)表示源图像像素
- 参数g(x)表示输出图像像素
- 参数a称为增益(gain),常被用来控制图像的对比度,要求大于0。
- 参数b称为偏置(bias),常用来控制图像的亮度
访问图片中的像素
以下是访问像素的代码,使用了三个for循环:
//三个for循环,执行计算new_image(i,j)=a*image(i,j)+b
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>((g_nContrastValue*0.01)