OpenCV 是一個在影像與圖像處理上非常實用且方便的一個工具,其龐大程度已經可以算是一個平臺,支援了各式各樣的編程語言,當然 Python 也是包含其中的“之一”,這個包集成了許多當下流行的圖像處理算法,成爲了他們呼叫函數的其中一個部分,不用我們用戶單獨的去設置函數細節,是個非常暖心的包。
使用了這個模塊做圖像處理一段時間了,總是隻有看到最後的結果與呼叫的函數對應功能,漸漸的這些處理過程被埋在了 opencv 處理的背後,爲了徹底親身經歷一遍圖像處理的過程,我 ps 了一張高 4 pixels,寬 3 pixels 的圖片(如下面圖片旁邊的那一“點”),由於原圖太小了,在其“點”的左邊放大顯示像素的樣貌:
當使用了 cv2.imread('path', 1) 把圖片讀入 opencv 裏面之後,代碼與結果如下:
>>> import cv2
>>> path = '/home/abc/Desktop/opencv_example.png'
>>> img = cv2.imread(path, 1)
>>> img
array([[[ 40, 180, 200],
[255, 255, 255],
[250, 180, 100]],
[[150, 50, 70],
[200, 120, 80],
[140, 40, 200]],
[[140, 200, 200],
[ 0, 0, 0],
[ 30, 200, 250]],
[[ 90, 160, 220],
[ 0, 40, 200],
[ 20, 220, 80]]], dtype=uint8)
>>> img.shape
(4, 3, 3)
>>> type(img)
<class 'numpy.ndarray'>
>>> img.size
36
>>> img.dtype
dtype('uint8')
縮小圖片之後導入 opencv 裏面的結果簡直是一目瞭然了!原來在 array 裏面的樣子就是把圖片翻了一個角度側着看的,而從圖裏面對應到的顏色看來,也就可以知道 opencv 在排部圖像顏色順序上採用的是 BGR 的方法(跟 matplotlib 這個包在操控圖片是偶的順序 RGB 是不同的,需要被轉換)