數字圖像在內存中的存儲方式
數字圖像在內存中的存儲就是一排排數字矩陣,如下圖所示:
上圖展示了圖片中很小一個區域在內存中的存儲形式,矩陣中的數值表示每個像素點強度值的大小。
OpenCv 讀取圖像數據並形成內存中的像素矩陣,像素矩陣的排布與圖像的顏色空間和數據類型有關。OpenCv 作爲一個計算機視覺庫,其主要工作是處理和操作這些像素矩陣信息。
顏色空間是指針對一個給定的顏色模型,如何組合像素並對其進行編碼;常見的顏色空間有灰度級空間、RGB顏色空間、HSV/HLS顏色空間、YCrCb顏色空間。數據類型決定了控制顏色的精度,常見的數據類型有無符號( 到 之間)的 char
,有符號( 到 之間)的 char
,型( 字節,位),double
型(字節,位),其中,float
和 double
可以給出更精細的顏色分辨能力。同時增加像素的尺寸也會增加圖像所佔的內存空間。
RGB顏色空間模型
的顏色空間:該顏色空間主要用於計算機圖形學中,表示每個像素具有 三種顏色分量,每個分量均爲 的大小,以三個分量爲座標軸,構建一個三維顏色空間。如下圖所示。
由圖可知::純黑色; :純白色; :純紅色; :純綠色; :純藍色。
圖片中任何一個帶顏色的像素都是由RGB構成的結構[B, G, R, A](這是OpenCv的存儲順序, 不同於我們認爲RGB順序)。
HSV的顏色空間
這個顏色模型中參數分別是:色調(H),飽和度(S),明度(V)。
- 色調(H):用角度來度量,取值範圍爲 ,從紅色開始按逆時針方向計算,紅色爲 ,綠色爲 ,藍色爲 。它們的補色是:黃色爲 ,青色爲 ,品紅爲 。
- 飽和度(S):飽和度 表示顏色接近光譜色的程度。一種顏色,可以看成是某種光譜色與白色混合的結果,其中光譜色所佔的比例越大,顏色接近光譜色的成都越高,顏色的飽和度也就越高。飽和度越高,顏色則深而豔。光譜色的白光成分爲 ,飽和度達到最高。通常取值範圍爲 ,值越大,顏色越飽和。
- 明度(V):明度表示顏色明亮的程度,對於光源色,明度值與發光體的光亮度有關;對於物體色,此值和物體的透射比或反射比有關。同城取值爲。與光強度沒有直接的聯繫。
模型的三維表示從 立方體演化而來。設想從 沿着立方體對角線的白色頂點向黑色頂點觀察,就可以看到立方體的六邊形外形。六邊形邊界表示色彩,水平軸表示純度,明度沿着垂直軸測量。
對於用戶來說是一種直觀的顏色模型。例如,要得到一種彩色模型,我們先指定彩色角 ,並讓 ,然後我們通過向其中加入黑色和白色得到我們需要的顏色。增加黑色可以減小 而 不變,增加白色可以減小 而 不變。例如,要得到深藍色,;
HSI的顏色空間
,也可以叫 ,其類似與 顏色空間模型。
- 色調(H),飽和度(S):與 顏色模型的概念是一樣的。顏色空間任一點距離 的距離。
- 強度(I):對應成像亮度和圖像灰度,是顏色的明亮程度。這個分量可以從圖片彩色信息(色調和飽和度)裏消去,使得 模型成爲開發基於彩色描述的圖像處理方法的良好工具,而這種彩色描述對於人來說是自然而直觀的。
注意:當強度 時,色調、飽和度 無定義;當 時,色調 無定義。
HSV與HSI顏色空間模型的區別
和 的顏色模型比較接近,它們用來描述顏色相對於 等模型顯得更加的自然。
在 和 中, 都表示色相,該值範圍爲 ,色相的意義就是光的波長,不同波長的光呈現了不同的色相。 都表示飽和度,其本質爲一束光可能有很多種不同波長的單色光構成,波長越多顏色越分散,而單色光構成的色彩純淨度就很高。
兩種模型唯一不同的就是最後一個分量:在 中表示亮度 ; 中 表示明度(Value/Brightness)。
上圖中能很好的對比出 和 的區別:在 中,圓柱體外圍是純色,這圈純色爲與亮度 等於 的部位;而在 中,純色對應於明度 等於 的部位。
在 中,飽和度分量總是對應等價的灰度值;而在 中,在極大值時候,飽和度從全飽和漸變話到白色,這可以認爲是反直覺的。
在 中,亮度的跨越是從黑色經過色相到白色的;而在 中, 分量是從黑色過渡到色相 的。
RGB、HSV和HSI的轉換方法
RGB–>HSV
HSV --> RGB