OpenCV学习笔记之改变图像的对比度和亮度
一、圖像對比度和亮度
圖像對比度指的是一幅圖像中明暗區域最亮的白和最暗的黑之間不同亮度層級的測量,即指一幅圖像灰度反差的大小。差異范圍越大代表對比越大,差異范圍越小代表對比越小,好的對比率120:1就可容易地顯示生動、豐富的色彩,當對比率高達300:1時,便可支持各階的顏色。
韋伯定律(感覺閾值定律):?[2]??在同種刺激下,人所能感受到的刺激的動態范圍正比于標準刺激的強度,K=ΔI/I?K為給定刺激下的常數,I為刺激,ΔI為能感受到的刺激的動態范圍。
應用到人的視覺刺激,定義韋伯對比度為:
I為物體的亮度,Ib為背景的整體亮度。
Michelson對比度
Michelson?[3]??對比度又被稱為“能見度”,定義為:
其中的?和
分別表示最亮的亮度和最暗的亮度。Michelson對比度與人的視覺感受中視錐細胞對視場光通量的空域頻率的感受程度在理論上是一致的。
均方根對比度
Peli 于1990年提出,與內容的空域頻率和空域分布均無關的圖像的對比度,被定義成一幅光柵圖像內像素值的?[4]??均方根(也就是標準差):
其中
描述的是一幅寬和高分別為w和h的光柵圖,
是圖像中指定位置的一個像素點的值,
?是圖的亮度(像素平均值),
?是均方根對比度(像素標準差)。
對于數字圖像變換,設原像素灰度為?f(i,j),轉化后的像素灰度為?g(i,j),則常用的線性變換是?g(i,j)= af(i,j) + b, 其中系數 a 影響圖像的對比度,系數 b 影響圖像的亮度,具體如下:
(1) a=1時是原圖;
(2) a>1時對比度增強,圖像看起來更加清晰;
(3) a<1時對比度減弱,圖像看起來變暗;
(4) b影響圖像的亮度,隨著增加b (b>0)和減小b (b>0),圖像整體的灰度值上移或者下移, 也就是圖像整體變亮或者變暗, 不會改變圖像的對比度
二、實踐操作
#include <QCoreApplication> #include <iostream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/imgcodecs.hpp> #include <QDebug> #include <QDir> #include <QFile> #include "iostream"using namespace std; using namespace cv;int main() {double alpha = 2.2 , beta = 50;Mat oriImg;//! 讀取圖片oriImg = imread("C:/1.png",IMREAD_COLOR);if( !oriImg.data ) { qDebug("Error loading src1 \n"); return -1; }imshow("ori",oriImg);//! 圖片大小要一致Mat resImg = Mat::zeros( oriImg.size(), oriImg.type() ); //! 執行運算 resImg(i,j) = alpha*oriImg(i,j) + betafor( int y = 0; y < oriImg.rows; y++ ){for( int x = 0; x < oriImg.cols; x++ ){for( int c = 0; c < 3; c++ ){resImg.at<Vec3b>(y,x)[c] = saturate_cast<uchar>( alpha*( oriImg.at<Vec3b>(y,x)[c] ) + beta );}}}imshow( "adjust", resImg );waitKey(0);return 0; }參考資料:
- 圖像對比度和亮度
- 改變圖像的對比度和亮度
附錄1:saturate_cast作用
為了安全轉換,運算結果可能超出像素取值范圍(溢出),還可能是非整數(如果是浮點數的話),用saturate_cast對結果進行轉換,以確保它為有效值。
總結
以上是生活随笔為你收集整理的OpenCV学习笔记之改变图像的对比度和亮度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV学习笔记之图像融合
- 下一篇: 编程语言之类型之间转换