1. 程式人生 > >《OpenCV3程式設計入門》——5.1 訪問影象中的畫素--顏色空間縮減及LUT函式:Look up table操作

《OpenCV3程式設計入門》——5.1 訪問影象中的畫素--顏色空間縮減及LUT函式:Look up table操作

1、顏色空間縮減

顏色空間縮減的做法是:將現有顏色空間值除以某個輸入值,以獲得較少的顏色數。即做減法,比如顏色值0到9可取為新值0,10到19可取為10,以此類推。

有一個簡單的公式來實現顏色空間縮減:I_{new}=\left ( I_{old} /10\right)\times 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] ]

簡單的顏色空間縮減演算法就由以下兩步組成:

  1. 遍歷影象矩陣的每一個畫素
  2. 對畫素應用上述公式

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);