-
亮度和对比度调整公式:
-
两种常用的点过程(即点算子),是用常数对点进行 乘法 和 加法 运算:
-
两个参数
和
一般称作增益 和 偏置 参数。我们往往用这两个参数来分别控制 对比度 和 亮度 。
-
你可以把
看成源图像像素,把
看成输出图像像素。这样一来,上面的式子就能写得更清楚些:
其中,
和
表示像素位于第i行 和 第j列 。
#include<opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int trackbar=80; //对比度值
int trackbar2=0; //亮度值
// 回调函数
void on_trackbar(int, void*)
{
Mat src = imread("001.jpg");
Mat dst;
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++)
{//saturate_cast<uchar>为强制类型转换
dst.at<Vec3b>(y, x)[c] = saturate_cast<uchar>((trackbar*0.01)*(src.at<Vec3b>(y, x)[c]) + trackbar2);
}
}
}
imshow("原图", src);
imshow("效果图窗口", dst);
}
int main()
{
namedWindow("效果图窗口", 1);
createTrackbar("对比度", "效果图窗口", &trackbar, 300, on_trackbar);
createTrackbar("亮度", "效果图窗口", &trackbar2, 200, on_trackbar);
on_trackbar(trackbar, 0);
on_trackbar(trackbar2, 0);
waitKey(0);
return 0;
}