图像的亮度及对比度调节可通过:g(i,j)=a*f(i,j)+ b 进行调整,f(i,j)为原来的像素,g(i,j)是调整后的像素,下面通过进度条来实现对亮度和对比度的调整。
#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
static int bright_value;
static int contrast_value;
static Mat src, dst1,dst2;
static double alpha=0.01;
//进度条回调函数
static void onBright_ContrastChange(int ,void *) {
for (int i = 0; i < src.rows; ++i) {
for (int j = 0; j < src.cols; ++j) {
for (int c = 0; c < 3; ++c) {
//像素调整
dst1.at<Vec3b>(i, j)[c]=saturate_cast<uchar> (alpha * bright_value )* (src.at<Vec3b>(i, j)[c] + contrast_value);
}
}
}
imshow("原始图像", src);
imshow("效果图像", dst1);
}
int main(int argc, int **argv) {
src = imread("F:\\img\\dota2.jpg");
//dst2 = imread("F:\\dota_log01.jpg");
dst1 = Mat::zeros(src.size(), src.type());
if (src.empty()) {
cout << "image src open failed !" << endl;
}
if (dst1.empty()) {
cout << "image dst open failed !" << endl;
}
//创建原始和效果窗口
namedWindow("原始图像",WINDOW_AUTOSIZE);
namedWindow("效果图像", WINDOW_AUTOSIZE);
//亮度和对比度初始值为80
contrast_value = 80;
bright_value = 80;
//创建进度条
createTrackbar("对比度:", "效果图像", &contrast_value, 300, onBright_ContrastChange);
createTrackbar("亮度:", "效果图像", &bright_value, 200, onBright_ContrastChange);
//回调函数初始化
onBright_ContrastChange(bright_value, 0);
onBright_ContrastChange(contrast_value, 0);
waitKey(0);
return 0;
}
结果: