1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
#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; }
|