OpenCV中圖像以Mat類型保存時各通道數據在內存中的組織形式及python代碼訪問各通道數據的簡要方式

以最簡單的4 x 5三通道圖像爲例,其在內存中Mat類型的數據組織形式以下:python

 

每一行的每一列像素的三個通道數據組成一個一維數組,一行像素組成一個二維數組,整幅圖像組成一個三維數組,即:shell

Mat.data[4, 5, 3] = [數組

[[B0, G0, R0],[B1, G1, R1],[B2, G2, R2],[B3, G3, R3],[B4, G4, R4]], spa

[[B5, G5, R5],[B6, G6, R6],[B7, G7, R7],[B8, G8, R8],[B9, G9, R9]], blog

[[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]]get

]it

咱們經過python單獨訪問每一個通道的數據能夠採用切片(Slice)操做的方是:import

img_blue   = img_mat[:, :, 0]numpy

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通道的圖像數據,其內容以下:

image

咱們隨便取一通道的數據,好比BGR三通道的G通道,也就是第2個通道,繼續在python的shell界面輸入以下指令:

a[:, :, 1]

數據以下:

image

上述數據是一個二維數組:每一行的G通道數據組成一個一維數組,整幅圖像的G通道數據組成一個二維數組。

相關文章
相關標籤/搜索