調整圖像的亮度和對比度—opencv


1.理論基礎

                                         g(x) = \alpha f(x) + \beta

兩個參數 \alpha > 0 和 \beta 一般稱作 增益 和 偏置 參數。我們往往用這兩個參數來分別控制 對比度 和 亮度 。

你可以把 f(x) 看成源圖像像素,把 g(x) 看成輸出圖像像素。這樣一來,上面的式子就能寫得更清楚些:

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

其中, 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)修改后的圖像:

還可以改變β的值 觀察顯示效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM