OpenCV的Python API基於Numpy庫,其核心數據結構爲ndarray。圖像數據一般分爲單通道(灰度圖,二值圖等)和三通道(RGB顏色模式圖等),這裏對單通道和三通道的圖像數據結構進行總結。
1.單通道圖片
單通道的圖片使用二維矩陣(數組)表示,python中二維矩陣(數組)使用二維的ndarray構造。
1.1.構造python的二維矩陣(數組)
構造一個二維矩陣(數組),首先要確定矩陣的行數(高)和列數(寬)以及數據類型,比如unit8、int32和float32等。
1)構造3行2列的全是1的uint8二維矩陣,代碼如下所示:
# -*- coding: utf-8 -*-
import numpy as np
matrix=np.ones((3,2),np.uint8)#定義3行2列的全爲1的矩陣
print(matrix)
程序運行結果爲:
2)構造2行4列全爲0的float32二維矩陣,代碼如下:
# -*- coding: utf-8 -*-
import numpy as np
matrix=np.zeros((2,4),np.float32)#定義2行4列的全爲0的矩陣
print(matrix)
程序運行結果爲:
1.2.二維矩陣表示單通道圖片
先使用OpenCV讀取並打印高寬爲11*17
像素的圖片,代碼如下:
# -*- coding: utf-8 -*-
import cv2
img=cv2.imread('2.png',0)#返回灰度圖像
print(img) #打印代表灰度圖像的2維矩陣
程序運行結果爲:
2.三通道圖片
三通道的圖片使用三維矩陣(數組)表示,python中三維矩陣(數組)使用三維的ndarray構造。
2.1.構造python的三維矩陣(數組)
構造一個三維矩陣(數組),首先要確定矩陣的行數(高)和列數(寬)以及數據類型,比如unit8、int32和float32等。三維數組可以理解成每一個元素都是二維數組,例如初始化一個3*2*2
的int8數組(可以看成包含3個2*2
的二維矩陣),代碼如下:
# -*- coding: utf-8 -*-
import numpy as np
m=np.array([
[[1,2],[3,4]],
[[1,2],[5,6]],
[[3,4],[7,8]]
],np.int8)
print(m)
程序運行結果爲:
2.2.三維矩陣表示三通道圖片
三維ndarray表示h*w
大小圖像的示意圖如下:
使用OpenCV讀取並打印高寬爲3*4
三通道的RGB彩色圖片,代碼如下:
# -*- coding: utf-8 -*-
import cv2
img=cv2.imread('3.png',1)#返回RGB彩色圖像
print(img) #打印代表灰度圖像的3維矩陣
程序運行結果爲: