天天看點

opencv筆記3:trackbar簡單使用

當需要測試某變量的一系列取值取值會産生什麼結果時,适合用trackbar。看起來就是debug的一種技術手段了。

主要是使用<code>createTrackbar</code>函數。具體講,是把trackbar放到一個視窗中,并為trackbar設定回調函數,步驟還是有點繁瑣的:

定義圖像

定義視窗

定義回調函數

建立trackbar

回調函數初始化

善後工作

其中回調函數參數規定為<code>(int, void*)</code>格式,然而在我看來并沒有卵用,遲早要去掉的。

建立trackbar時要指定window的名字,好把自己放進去。

建立trackbar時還傳入了<code>int* value</code>參數,表示進度條滑動後改變的量。注意到傳入類型是指針,是真的改變這個變量的值。顯然,多個trackbar可以共用同一個回調函數,隻要回調函數中用到了各trackbar對應的變量。

這裡回調函數的例子是,混合兩張圖檔,而trackbar進度條的值是混合公式中的alpha值。代碼:

上面是最簡單的例子。稍微變化下,可以弄兩個進度條,一個控制對比度,一個控制亮度,回調函數中把亮度和對比度都使用到,就可以了。其理論依據是,

也就是,對比度是和圖像灰階值相乘的,而亮度是和灰階值相加的。

那麼對應的完整代碼為:

為了通路圖像的每一個像素,我們使用這樣的文法: image.at(y,x)[c]

其中,y是像素所在的行, x是像素所在的列, c是R、G、B(對應0、1、2)其中之一。

因為我們的運算結果可能超出像素取值範圍(溢出),還可能是非整數(如果是浮點數的話),是以我們要用saturate_cast對結果進行轉換,以確定它為有效值。

這裡的a也就是對比度,一般為了觀察的效果,取值為0.0到3.0的浮點值,但是我們的軌迹條一般取值都會整數,是以在這裡我們可以,将其代表對比度值的nContrastValue參數設為0到300之間的整型,在最後的式子中乘以一個0.01,這樣就可以完成軌迹條中300個不同取值的變化。是以在式子中,我們會看到saturate_cast( (g_nContrastValue0.01)(image.at(y,x)[c] ) + g_nBrightValue )中的g_nContrastValue*0.01。

繼續閱讀