本節書摘來自華章計算機《opencv圖像處理》一書中的第2章,第2.1節,作者:[西]葛羅瑞亞·布埃諾·加西亞(gloria bueno garcía)著,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視
opencv中的基本資料類型是mat,用來存儲圖像。總體上講,一幅圖像被儲存為一個頭加上一個包含像素資料的記憶體區。圖像有若幹個通道。灰階圖像有一個通道,而彩色圖像通常有紅、綠和藍三個構成成分(但是opencv以其逆序,即藍、綠和紅來存儲這三個分量),還可以使用第四個透明度(alpha)通道。可以用img.channels()擷取一幅img圖像的通道數。
使用若幹個位來存儲一幅圖像的每個像素,這被稱為圖像深度(image depth)。對于灰階圖像,像素通常存儲為8位,是以允許256個灰階級(從整數值0到255)。對于彩色圖像,每個像素存儲為3個位元組,每個顔色通道占用一個位元組。某些操作必須以浮點格式存儲像素。可以使用img.depth()擷取圖像深度,其傳回值是:
cv_8u,8位無符号整數(0~255)
cv_8s,8位有符号整數(-128~127)
cv_16u,16位無符号整數(0~65?535)
cv_16s,16位有符号整數(-32?768~32?767)
cv_32s,32位有符号整數(-2?147?483?648~2?147?483?647)
cv_32f,32位浮點數
cv_64f,64位浮點數
注意,對于灰階圖像和彩色圖像,最常見的圖像深度是cv_8u。使用方法convertto可以将一種圖像深度轉換為另一種圖像深度:

在浮點圖像上進行操作(即像素值是數學運算的結果)是很常見的。如果使用imshow()顯示這幅圖像,将不會看到任何有意義的内容。在這種情況下,必須将像素轉換到0~255整數範圍。函數convertto實作一種線性變換并有兩個額外的參數alpha和beta,分别表示增加一個尺度因子和一個增量值。這意味着每個像素p被轉
換為:
newp = alpha*p + beta
它可以用來正确地顯示浮點圖像。假設img圖像有最小值m和最大值m(參考下面的代碼,看看如何擷取這些值),則我們可以使用:
這些代碼将結果圖像值的範圍映射到0~255範圍。圖2-1顯示了運作該代碼的
結果。
使用行屬性和列屬性可以擷取圖像的大小。還有一個size屬性可獲得二者:
除了圖像本身,其他資料類型都很常見,請參考表2-1:
其中某些類型有附加操作。例如,可以檢查一個點是否位于一個矩形内:
這裡的參數p和參數r分别是點(二維)和矩形。注意,在任何情況下,表2-1并不是非常完備的;opencv的相關方法提供了更多的支撐結構。