《OpenCV3程式設計入門》——5.1 訪問影象中的畫素--顏色空間縮減及LUT函式:Look up table操作
阿新 • • 發佈:2018-11-30
1、顏色空間縮減
顏色空間縮減的做法是:將現有顏色空間值除以某個輸入值,以獲得較少的顏色數。即做減法,比如顏色值0到9可取為新值0,10到19可取為10,以此類推。
有一個簡單的公式來實現顏色空間縮減:
在處理畫素時,每個畫素需要進行一遍上述公式計算,也需要一定的時間花銷。我們可以把256中計算好的結果提前存在列表table中,這樣每種情況不需計算,直接從table中取取結果即可。
int divideWith = 10; unchar table[256]; for( int i =0; i<256; ++i) table[i] = divideWith*(i/divideWith);
於是table[i]存放的是值為 i 的畫素減小顏色空間的結果,這樣就可以理解上述方法中的操作:p [j] = table[ p [j] ]
簡單的顏色空間縮減演算法就由以下兩步組成:
- 遍歷影象矩陣的每一個畫素
- 對畫素應用上述公式
2、LUT函式:Look up table操作
Look up table操作使用operationsOnArrays:LUT()<lut>函式,用於批量進行影象元素查詢、掃描與操作影象。使用方法如下:
//首先建立一個mat型用於查表 Mat lookUpTable(1, 256, CV_8U); uchar* p = lookUpTable.data; for(int i = 0; i < 256; ++i) p[i] = table[i]; //呼叫函式(I是輸入,J是輸出) for (int i = 0; i < times; ++i) LUT(I, lookUpTable, J);