1、目标
a、在這裡将會學到怎樣讀取一副圖像,怎樣顯示幅圖像,以及如何儲存一副圖像
b、要學習的函數如下:
cv2.imread(),cv2.imshow(),cv2.imwrite()
c、還可以使用Matplotlib顯示一幅圖檔
2、讀入一幅圖像

警告:就算圖像的路徑是錯的,OpenCV 也不會提醒你的,但是當你使用命
令print img時得到的結果是None。
4、總結
下面的程式将會加載一個灰階圖,顯示圖檔,按下’s’鍵儲存後退出,或者
按下 ESC 鍵退出不儲存。
5、使用Matplotlib
Matplotib 是 python 的一個繪圖庫,裡頭有各種各樣的繪圖方法。之後
會陸續了解到。現在,你可以學習怎樣用 Matplotib 顯示圖像。你可以放大圖
像,儲存它等等。
參見:Matplotib 有多種繪圖選擇。具體可以參見 Matplotib docs。我們也
會陸續了解一些
注意:彩色圖像使用 OpenCV 加載時是 BGR 模式。但是 Matplotib 是 RGB
模式。是以彩色圖像如果已經被 OpenCV 讀取,那它将不會被 Matplotib 正
确顯示。具體細節請看練習
附加資源:
Matplotlib Plotting Styles and Features
http://matplotlib.org/api/pyplot_api.html
練習:
1. 當你用 OpenCV 加載一個彩色圖像,并用 Matplotib 顯示它時會遇
到一些困難。請閱讀this discussion并且嘗試了解它。
在opencv中彩色圖的順序是BGR,而在matplotlib中彩色圖的順序是RGB,如何互相轉換,
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('messi4.jpg')
b,g,r = cv2.split(img)
img2 = cv2.merge([r,g,b])
plt.subplot(121);plt.imshow(img) # expects distorted color
plt.subplot(122);plt.imshow(img2) # expect true color
plt.show()
cv2.imshow('bgr image',img) # expects true color
cv2.imshow('rgb image',img2) # expects distorted color
cv2.waitKey(0)
cv2.destroyAllWindows()
NB : Please check @Amro 's comment below for better method of conversion between BGR and RGB.
img2 = img[:,:,::-1]
. Very simple.
Run this code and see the difference in result yourself. Below is what I got :
補充:
1、用cv2.imshow顯示圖像,這種方式顯示的視窗無法調整,當顯示的圖像較大時,就無法看到完整的圖像,是以選擇先建立視窗再顯示圖像。
- import cv2
- img = cv2.imread('lena.jpg')
- win = cv2.namedWindow('test', flags=0)
- cv2.imshow('test', img)
- cv2.waitKey(0)
OpenCV采用視窗名稱來通路視窗,而不是視窗句柄之類的東西。
flags為0表示視窗可以用滑鼠來改變大小,此時顯示的圖像也跟着視窗大小變化,需要注意的是它可能會導緻圖像的變形:
2、matplotlib圖像顯示
- mport cv2
- import matplotlib.pyplot as plt
- img = cv2.imread('lena.jpg')
- plt.imshow(img)
- plt.show()
顔色有問題,下面将第1通道和第3通道交換後顯示:
- import numpy as np
- import cv2
- (r, g, b)=cv2.split(img)
- img=cv2.merge([b,g,r])
就正常了
3、用plt讀取圖像
再比較一下plt.imread和cv2.imread的差别:
- img1 = cv2.imread('lena.jpg')
- img2 = plt.imread('lena.jpg')
- plt.subplot(121)
- plt.imshow(img1)
- plt.subplot(122)
- plt.imshow(img2)
上述代碼讀取同一張圖像并用相同的方法顯示,差異還是在顔色通道上:
4、matplotlib顯示灰階圖
對于隻有一個顔色通道的圖像,matplotlib可以指定一個map,将單個顔色通道的圖像轉換為彩色圖像。
matplotlib支援下面的map。