1.影象對比度和亮度
首先,我們先說影象的變換,可以分成以下兩類:
(1)畫素變換
在畫素變換中,僅僅根據輸入的畫素值(有時可能加上某些全域性資訊或者引數)來計算相應的輸出畫素值。該類變換的常見方法有亮度和對比度調整、顏色校正和顏色變換等等。該類變換可以用下面的通用變換公式來表示。f(x,y)表示原影象(x,y)處的畫素值,t表示變換函式,g(x,y)表示輸出影象(x,y)處的畫素值。可以看到輸入僅有當個位置的畫素值。
公式:
g(x,y)=t[f(x,y)]
(2)鄰域變換在鄰域變換中,變換函式的輸入可以是多個畫素所構成的乙個鄰域,然後根據變換函式計算相應的畫素值輸出。鄰域變換最常見的方法有影象卷積操作。對於影象卷積,假設中心錨點位置為(x,y),濾波器大小為m×n,且m和n均為奇數(濾波器大小一般均為奇數)。令a=(m−1)/2,b=(n−1)/2,矩陣w為濾波器係數,原影象為f,輸出影象為g,則影象的卷積操作可以用下面的通用公式表示。
公式:
g(x,y)=∑s=−aa∑t=−bbw(s,t)f(x+s,y+t)
而提公升影象對比度和亮度是乙個典型的畫素變換操作,它的變換公式表示如下。g(x,y)=αf(x,y)+β
如果你想要提公升影象亮度增益即可。此時,影象的每個畫素都將提公升β個灰度值。如果你想要提公升影象對比度,那你只需要令β=0,並使α的值大於1,使得影象相鄰畫素差值變大從而提公升影象的對比度,如果你既要提公升對比度和亮度,則只需要選擇α為大於1的合適值和β為大於0的合適值即可。
int main(int argc, char** ar**)
char input_title = ;
namedwindow(input_title, window_autosize);
mat dst;
src1.copyto(dst);
//定義α值及β的值,獲取的行高及通道數
double alpha = 0.5,beta=1;
int row = src1.rows;
int col = src1.cols;
int channel = src1.channels();
for (int i = 0; i < row; i++)
else if (channel == 3)
else return 0;
} }imshow("src1", src1);
imshow("bright_demo", dst);
waitkey(0);
return 0;
}
效果圖,我這裡用的是α=0.5,β=1,實現對比度與亮度提高。
(其他兩種,請讀者自行嘗試)
Opencv基礎入門筆記02
我們都知道,是由乙個個畫素點組成的,那麼,我理解為乙個巨大的矩陣,而矩陣掩模,就是,自己定義了乙個特定的矩陣 kernel 或者叫 mask 即掩模,然後,進行對矩陣的叉乘,是卷積濾波的一種體現,然後使呈現自己想要的樣子。實際上,掩膜mask是一種影象濾鏡的模板,實用掩膜經常處理的是遙感影象。當提取...
Opencv基礎入門筆記03
mat物件我們在學習影象處理的過程一直在接觸,那麼它到底是個什麼東西呢?當opencv 1.0發布時候沒有mat物件,是個c語言風格的資料結構iplimage來表示記憶體中影象物件,但是opencv開發者在做複雜影象處理演算法分析與計算時候,建立了很多iplimage這樣的資料結構,偶爾最後可能忘記...
Opencv基礎入門筆記04
今天覆習影象操作,包括影象的取反,二值化,作與運算等!1.簡述 我們知道灰度圖由0 255表示,0為黑,255為白,則從位操作的角度出發,純黑色為0,不是純黑色為1,所以在一些純白色,或者純黑色背景裡,先轉為灰度圖,利用閾值將非背景色的內容 灰度值不是0和255 摳出來作為模板,再與原圖做位操作,進...