以最簡單的4 x 5三通道圖像為例,其在內存中Mat類型的數據組織形式如下:
每一行的每一列像素的三個通道數據組成一個一維數組,一行像素組成一個二維數組,整幅圖像組成一個三維數組,即:
Mat.data[4, 5, 3] = [
[[B0, G0, R0],[B1, G1, R1],[B2, G2, R2],[B3, G3, R3],[B4, G4, R4]],
[[B5, G5, R5],[B6, G6, R6],[B7, G7, R7],[B8, G8, R8],[B9, G9, R9]],
[[B10, G10, R10],[B11, G11, R11],[B12, G12, R12],[B13, G13, R13],[B14, G14, R14]],
[[B15, G15, R15],[B16, G16, R16],[B17, G17, R17],[B18, G18, R18],[B19, G19, R19]]
]
我們通過python單獨訪問每個通道的數據可以采用切片(Slice)操作的方是:
img_blue = img_mat[:, :, 0]
img_green = img_mat[:, :, 1]
img_red = img_mat[:, :, 2]
上述代碼有些抽象,啟動python我們模擬操作一下,控制台輸入python,進入shell,導入numpy(import numpy as np),然后輸入如下語句:
a = np.arange(36).reshape(4, 5, 3)
我們模擬了一個4行、3列、3通道的圖像數據,其內容如下:
我們隨便取一通道的數據,比如BGR三通道的G通道,也就是第2個通道,繼續在python的shell界面輸入如下指令:
a[:, :, 1]
數據如下:
上述數據是一個二維數組:每一行的G通道數據組成一個一維數組,整幅圖像的G通道數據組成一個二維數組。