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)修改后的图像:

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

  • 相关阅读:
    51nod 1067 Bash游戏 V2
    洛谷 P1454 圣诞夜的极光 == codevs 1293 送给圣诞夜的极光
    bzoj4754: [Jsoi2016]独特的树叶
    bzoj 4241: 历史研究
    bzoj 1266 [AHOI2006] 上学路线
    bzoj4571: [Scoi2016]美味
    bzoj4570: [Scoi2016]妖怪
    51nod 1238 最小公倍数之和 V3
    一个康托展开的板子
    poweroj1745: 餐巾计划问题
  • 原文地址:https://www.cnblogs.com/carlber/p/9613688.html
Copyright © 2011-2022 走看看