#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int _brightness = 100;
int _contrast = 100;
Mat image;
static void updateBrightnessContrast(int , void *) {
int histSize = 64;
int brightness = _brightness - 100;
int contrast = _contrast - 100;
double a, b;
if (contrast > 0) {
double delta = 127. * contrast / 100;
a = 255. / (255. - delta * 2);
b = a * (brightness - delta);
} else {
double delta = -128. * contrast / 100;
a = (256. - delta * 2) / 255.;
b = a * brightness + delta;
}
Mat dst, hist;
image.convertTo(dst, CV_8U, a, b);
imshow("image", dst);
calcHist(&dst, 1, 0, Mat(), hist, 1, &histSize, 0);
Mat histImage = Mat::ones(200, 320, CV_8U) * 255;
normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, CV_32F);
histImage = Scalar::all(255);
int binW = cvRound((double)histImage.cols / histSize);
for (int i = 0; i < histSize; i++)
rectangle(histImage, Point(i * binW, histImage.rows),
Point((i + 1) * binW, histImage.rows - cvRound(hist.at<float>(i))),
Scalar::all(0), -1, 8, 0);
imshow("histogram", histImage);
}
int main(int argc, const char **argv) {
image = imread("1.png", 1);
imshow("src", image);
image = imread("1.png", 0);
imshow("gray", image);
namedWindow("image", 0);
namedWindow("histogram", 0);
createTrackbar("brightness", "image", &_brightness, 200, updateBrightnessContrast);
createTrackbar("contrast", "image", &_contrast, 200, updateBrightnessContrast);
updateBrightnessContrast(0, 0);
waitKey();
return 0;
}