码迷,mamicode.com
首页 > 编程语言 > 详细

OpenCV-C++ 调整图像亮度和对比度

时间:2021-04-07 11:02:47      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:could not   图片   新建   div   spl   namespace   ios   enc   mic   

调整图像亮度和对比的方式,计算表达是如下:

\[g(i, j) = \alpha f(i, j) + \beta \]

\(\alpha>0\)用于控制对比度, \(\beta\)是增益变量;

\(g\)表示调整后的图像,\(f\)表示原始图像;

代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(){

    // 读取图像
    Mat src = imread("/home/chen/dataset/lena.jpg");
    if (src.empty()){
        cout << "could not load image." << endl;
        return -1;
    }
    char input_win[] = "src";
    namedWindow(input_win, WINDOW_AUTOSIZE);
    imshow("src", src);

    // 调整亮度和对比度
    double alpha = 1.2;  // 用于调整对比度
    double beta = 30;  // 用于增加亮度

    // 新建目标图像
    Mat dst = Mat::zeros(src.size(), src.type());

    int rows = src.rows;
    int cols = src.cols;

    for (int row = 0; row < rows - 1; row++){
        for (int col = 0; col < cols - 1; col++){
            // 获取像素
            int b = src.at<Vec3b>(row, col)[0];
            int g = src.at<Vec3b>(row, col)[1];
            int r = src.at<Vec3b>(row, col)[2];
            
            // 调整亮度和对比度
            dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(alpha*b + beta);
            dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(alpha*g + beta);
            dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(alpha*r + beta);
        }
    }
    namedWindow("dst", WINDOW_AUTOSIZE);
    imshow("dst", dst);

    waitKey(0);
    return 0;
}

结果对比如下:

技术图片

OpenCV-C++ 调整图像亮度和对比度

标签:could not   图片   新建   div   spl   namespace   ios   enc   mic   

原文地址:https://www.cnblogs.com/chenzhen0530/p/14619717.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!