图像 对比度、亮度调整

#include "stdafx.h"

#include <opencv2\highgui\highgui.hpp>
#include <opencv2\core\core.hpp>
#include <iostream>
using namespace std;
using namespace cv;

//描述:全局函数声明
static void on_ContrastAndBright(int, void *);
static void ShowHelpText();

//描述:全局变量声明
int g_nContrastValue;//对比度
int g_nBrightValue;//亮度值
Mat g_srcImage, g_dstImage;

int main()
{
    //【1】读取输入图片
    string filepath = "D:\\pic\\";
    g_srcImage = imread(filepath + "1.jpg");
    if (!g_srcImage.data)
    {
        printf("读取图片错误");
        return false;
    }
    g_dstImage = Mat::zeros(g_srcImage.size(), g_srcImage.type());

    //【2】设定对比度和亮度
    g_nContrastValue = 80;
    g_nBrightValue = 90;

    //【3】创建效果图窗口
    namedWindow("【效果图窗口】", 1);

    //【4】创建轨迹条
    createTrackbar("对比度:", "【效果图窗口】", &g_nContrastValue, 300, on_ContrastAndBright);
    createTrackbar("亮 度:", "【效果图窗口】", &g_nBrightValue, 200, on_ContrastAndBright);

    //【5】回调函数初始化
    on_ContrastAndBright(g_nContrastValue, 0);
    on_ContrastAndBright(g_nBrightValue, 0);

    //【6】按下"q"键时,退出
    while (char(waitKey(1)) != 'q'){}

    system("pause");
    return 0;
}

static void on_ContrastAndBright(int, void *)
{
    //创建窗口
    namedWindow("【原始图窗口】", 1);

    //三个for循环,执行运算g_dstImage(i,j) = a * g_srcImage(i,j) + b
    for (int y = 0; y < g_srcImage.rows; y++)
    {
        for (int x = 0; x < g_srcImage.cols; x++)
        {
            for (int c = 0; c < 3; c++)
            {
                g_dstImage.at<Vec3b>(y, x)[c] =
                    saturate_cast<uchar>((g_nContrastValue * 0.01)* (g_srcImage.at<Vec3b>(y, x)[c]) + g_nBrightValue);

            }
        }
    }

    //显示图像
    imshow("【原始图窗口】", g_srcImage);
    imshow("【效果图窗口】", g_dstImage);

}

这里写图片描述

参考文献:
[1]. OpenCV3编程入门——毛星云
[2]. https://blog.csdn.net/poem_qianmo/article/details/21479533

猜你喜欢

转载自blog.csdn.net/u014801811/article/details/80082565