OpenCV 图像对比度和亮度调节

一. 实验描述

用OpenCV的滑动条和像素操作对图像的对比度和亮度进行调节。

二. 实验代码

#include 
#include 
#include 

using namespace std;
using namespace cv;

const string WINDOW_NAME = "对比度&亮度";
Mat src_img;
Mat dst_img;
int contrast_value;
int bright_value;

void on_change(int, void *) {
    for (int i = 0; i < src_img.rows; ++i) {
        for (int j = 0; j < src_img.cols; ++j) {
            for (int c = 0; c < 3; ++c) {
                dst_img.at(i, j)[c] = saturate_cast((contrast_value * 0.01) * src_img.at(i, j)[c] + bright_value);
            }
        }
    }

    cout << contrast_value << ' ' << bright_value << endl;

    imshow(WINDOW_NAME, dst_img);
}

int main() {
    src_img = imread("img/1.jpg");

    if (!src_img.data) {
        cerr << "图片读取错误!" << endl;
    }

    dst_img = Mat::zeros(src_img.size(), src_img.type());

    contrast_value = 80;
    bright_value = 80;

    namedWindow(WINDOW_NAME);

    createTrackbar("对比度: ", WINDOW_NAME, &contrast_value, 300, on_change);
    createTrackbar("亮  度: ", WINDOW_NAME, &bright_value, 200, on_change);

    on_change(contrast_value, 0);
    on_change(bright_value, 0);

    waitKey(0);
    return 0;
}

三. 实验结果

OpenCV 图像对比度和亮度调节_第1张图片
OpenCV 图像对比度和亮度调节_第2张图片

你可能感兴趣的:(OpenCV)