Python-OpenCV學習(三):圖像的表示


轉載請注明出處:danscarlett的博客園

  
在Python-OpenCV中,因為有numpy這種強大的基礎工具,單通道的灰度圖像(一個8位無符號整型的矩陣)就用numpy的array表示。
 
如果是多通道情況,最常見的就是紅綠藍(RGB)三通道,則第一個維度是高度,第二個維度是高度,第三個維度是通道。
 
下圖是一幅3×3圖像在計算機中表示的例子:
右上角的矩陣里,每個元素都是一個3維數組,分別代表這個像素上的三個通道的值。
最常見的RGB通道中,第一個元素就是紅色( Red)的值,第二個元素是綠色(Green)的值,第三個元素是藍色(Blue),最終得到的圖像如下面的(a)所示。
RGB是最常見的情況,然而在OpenCV中,默認的圖像的表示確實反過來的,也就是BGR,得到的圖像是6-1(b)。可以看到,前兩行的顏色順序都交換了,最后一行是三個通道等值的灰度圖,所以沒有影響。
OpenCV的這個特殊之處還是需要注意的, 比如在Python中,圖像都是用numpy的array表示,但是同樣的array在OpenCV中的顯示效果和matplotlib中的顯示效果就會不一樣。
 
  下面的簡單代碼就可以生成兩種表示方式下,圖6-1中矩陣的對應的圖像,生成圖像后,放大看就能體會到區別:
 1 import numpy as np
 2 import cv2
 3 import matplotlib.pyplot as plt
 4 
 5 # 圖6-1中的矩陣
 6 img = np.array([
 7     [[255, 0, 0], [0, 255, 0], [0, 0, 255]],
 8     [[255, 255, 0], [255, 0, 255], [0, 255, 255]],
 9     [[255, 255, 255], [128, 128, 128], [0, 0, 0]],
10 ], dtype=np.uint8)
11 
12 # 用matplotlib存儲
13 plt.imsave('img_pyplot.jpg', img)
14 
15 # 用OpenCV存儲
16 cv2.imwrite('img_cv2.jpg', img)

 

img_cv2
 
img_pyplot
 
不管是RGB還是BGR,都是高度×寬度×通道數,H×W×C的表達方式,而在深度學習中,因為要對不同通道應用卷積,所以用的是另一種方式:C×H×W,就是把每個通道都單獨表達成一個二維矩陣,如圖6-1c所示。
 
備注:matplptlib的安裝
在CMD中運行
python -m pip install matplotlib
就可以順利安裝。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM