每日一學:如何用matplotlib展示圖片

前言

今天簡單介紹如何通過 matplotlib 展示圖片,分為以下幾種情況:

  1. 直接用 matplotlib 讀取圖片,然後展示圖片;
  2. 採用 opencv 讀取圖片,然後用 matplotlib 來展示圖片;
  3. 採用 PIL 讀取圖片,然後用 matplotlib 來展示圖片。

首先是需要安裝需要的庫,主要是 opencv 、 matplotlib、Pillow 兩個庫:

<code>pip install opencv-python matplotlib Pillow/<code>

此外,在 jupyter 中運行代碼。

另外,本次代碼例子中展示所用的圖片為:

每日一學:如何用matplotlib展示圖片

代碼和圖片都上傳到 GitHub 上了:

https://github.com/ccc013/CodesNotes/blob/master/PythonNotes/matplotlib_notes.ipynb

matplotlib 讀取並展示圖片

首先是導入需要的庫:

<code>import matplotlib.pyplot as plt
import matplotlib.image as mpimg
%matplotlib inline/<code>

第一行就是導入用於展示圖片的函數 matplotlib 的 pyplot ,第二行則是用於讀取圖片的 image ,第三行是因為在 jupyter 中用 matplotlit 展示圖片需要加入的一行代碼。

接下來就是讀取並展示圖片,如下所示:

<code># 採用 matplotlib 展示圖片
image = mpimg.imread('plane.jpg')
plt.imshow(image)/<code>

結果如下所示:

每日一學:如何用matplotlib展示圖片

這裡我們發現展示的圖片,出現了座標軸,可以通過添加一行代碼,來關閉座標軸:

<code>plt.axis('off')/<code>

結果如下所示:

每日一學:如何用matplotlib展示圖片

展示通過 opencv 讀取的圖片

不過,對於圖像庫,使用更多的還是 opencv ,所以如何通過 matplotlib 展示 opencv 讀取的圖片呢?

代碼其實很簡單,如下所示:

<code>import cv2
image = cv2.imread("plane.jpg")
plt.imshow(image)/<code>
每日一學:如何用matplotlib展示圖片

但這裡發現展示的圖片顏色不對,和原圖出現了很大的區別,這是為什麼呢?

原因其實是 opencv 對於 RGB 圖片是將其表示為一個多維的 NumPy 的多維數組,但排列順序是反序的,也就是BGR 的順序,因此這裡需要對通道順序進行調整,代碼應該這麼修改:

<code>plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))/<code>
每日一學:如何用matplotlib展示圖片

通過進行通道的轉換後,再次展示圖片,就能顯示原圖了。

展示通過 PIL 讀取的圖片

另外一個非常常用的圖像處理庫就是 PIL 了,這裡展示的代碼也很簡單,如下所示:

<code># 展示 PIL 讀取的圖片
from PIL import Image
image = Image.open('plane.jpg')
plt.imshow(image)/<code>
每日一學:如何用matplotlib展示圖片

小結

今天簡單介紹瞭如何通過 matplotlib 來展示圖片,分別是三種情況,直接用 matplotlib 讀取圖片,用 opencv 讀取圖片,用 PIL 讀取圖片,其中需要注意的是 opencv 讀取圖片的情況,因為其對於 RGB 通道的排列是反序的。


分享到:


相關文章: