zoukankan      html  css  js  c++  java
  • 调整图像的亮度和对比度—opencv

    1.理论基础

                                             g(x) = alpha f(x) + eta

    两个参数 alpha > 0 和 eta 一般称作 增益 和 偏置 参数。我们往往用这两个参数来分别控制 对比度 和 亮度 。

    你可以把 f(x) 看成源图像像素,把 g(x) 看成输出图像像素。这样一来,上面的式子就能写得更清楚些:

                                                                                                                      g(i,j) = alpha cdot f(i,j) + eta

    其中, i 和 j 表示像素位于 第i行 和 第j列 。

    其中,α可以调整图像的对比度,β可以调整图像的亮度。

    2.代码如下:

     1 #include<iostream>
     2 #include<opencv2/opencv.hpp>
     3 
     4 using namespace std;
     5 using namespace cv;
     6 
     7 int main(int argc, char **argv)
     8 {
     9     Mat src = imread("D:/meinv.jpg");
    10     if (!src.data)
    11     {
    12         printf("Couldn't load the image......");
    13         return -1;
    14     }
    15     namedWindow("源图像", CV_WINDOW_AUTOSIZE);
    16     imshow("源图像", src);
    17 
    18     int height = src.rows;
    19     int width = src.cols;
    20     int channels = src.channels();
    21      
    22     Mat dst = Mat::zeros(src.size(),src.type());  //创建一个和原图像大小相同,类型相同,像素值为0的图像。
    23     float alpha = 1.5;  //设置参数
    24     float beta = 0;
    25     
    26     //对每个像素点的操作
    27     for (int i = 0; i < height; i++)
    28     {
    29         for (int j = 0; j < width; j++)
    30         {
    31             if (channels == 3)     //如果是彩色图像
    32             { 
    33                 dst.at<Vec3b>(i, j)[0] = saturate_cast<uchar>(alpha*(src.at<Vec3b>(i, j)[0]) + beta);
    34                 dst.at<Vec3b>(i, j)[1] = saturate_cast<uchar>(alpha*(src.at<Vec3b>(i, j)[1]) + beta);
    35                 dst.at<Vec3b>(i, j)[2] = saturate_cast<uchar>(alpha*(src.at<Vec3b>(i, j)[2]) + beta);
    36             }
    37             else if (channels == 1)  //灰度图像
    38             {
    39                 dst.at<uchar>(i,j) = saturate_cast<uchar>(alpha*(src.at<uchar>(i, j)) + beta);
    40                 
    41             }
    42         }
    43     }
    44     imshow("dst_image", dst);
    45     waitKey(0);
    46     return 0;
    47 
    48 }

    3.显示效果:

    (1)原图:

    (2)修改后的图像:

    还可以改变β的值 观察显示效果

  • 相关阅读:
    base64转图片的两种方式
    perl表达 匿名数组和匿名哈希
    perl语言中的定义枚举
    两个字符串连接输出乱码问题解决
    perl LibXML模块使用详解
    SQL优化-标量子查询(数据仓库设计的隐患-标量子查询)
    CDH版hbase-0.98.1单机安装
    CDH版本hadoop2.6伪分布式安装
    MYSQL数据的安装、配置
    Redis介绍、安装部署、操作
  • 原文地址:https://www.cnblogs.com/carlber/p/9613688.html
Copyright © 2011-2022 走看看