zoukankan      html  css  js  c++  java
  • OpenCV-C++ 调整图像亮度和对比度

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

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

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

    (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;
    }
    

    结果对比如下:

  • 相关阅读:
    [Leetcode]-- Median of Two Sorted Arrays
    Implement strStr()
    [Leetcode]-- Remove Element
    3Sum
    推荐一个跨平台内存分配器
    ACE的缺陷
    详谈高性能UDP服务器的开发
    vi查找替换命令详解
    gcc多版本切换
    Centos 5.5升级Python到2.7版本
  • 原文地址:https://www.cnblogs.com/chenzhen0530/p/14619717.html
Copyright © 2011-2022 走看看