HOWTO · Matplotlib
如何使用 Matplotlib Python 顯示圖像
了解如何使用 Matplotlib 的 imshow() 載入和顯示本機圖像、顯示 PIL 圖像、自訂其外觀並儲存圖形。
本頁內容
使用 matplotlib.pyplot.imread() 載入圖像,使用 imshow() 將其像素放入 Matplotlib 座標軸中,並使用 show() 在指令碼中顯示圖形。傳遞給 imread() 的路徑必須識別 Python 程序可用的圖像。在筆記本中,最終圖形通常會自動顯示;在一般指令碼中,請呼叫 plt.show()。
使用 Matplotlib 載入並顯示圖像
這個自包含範例建立一個小的範例圖像,用 imread() 讀取它並顯示它。對於您的檔案,請將範例圖像的設定和 image_path 指派替換為 Python 程序可存取的圖像路徑。將圖像放在指令碼旁邊並使用其檔案名,或提供絕對路徑;相對路徑從程序的目前工作目錄解析。
from pathlib import Path
from tempfile import TemporaryDirectory
import matplotlib.pyplot as plt
import numpy as np
with TemporaryDirectory() as directory:
image_path = Path(directory) / "sample.png"
pixels = np.zeros((3, 3, 3), dtype=float)
pixels[:, :, 0] = 1.0
plt.imsave(image_path, pixels)
image = plt.imread(image_path)
plt.imshow(image)
plt.axis("off")
plt.show()
print("Image loaded and displayed.")
Image loaded and displayed.
imread() 將檔案載入到陣列中,imshow() 是 matplotlib.pyplot 中的一個函式,它在目前座標軸中顯示該圖像資料。axis("off") 隱藏座標軸及其刻度。生成的範例只是這個可執行範例的一個 fixture;使用您自己的圖像時,請將該檔案保持在所選路徑上可用,並直接讀取它。
使用 Matplotlib 顯示 PIL 圖像
如果圖像已經由 PIL 圖像物件表示,請將該物件傳遞給 imshow(),而不是用 plt.imread() 讀取它。當程式的另一部分已經用 Pillow 開啟或處理了圖像時,這很有用。Image.show() 是單獨的 PIL 顯示途徑;使用 plt.show() 顯示 Matplotlib 圖形。兩個顯示呼叫使用不同的呈現路徑,因此當您需要座標軸、圖形大小設定或圖形匯出時,請使用 Matplotlib 途徑。
from pathlib import Path
from tempfile import TemporaryDirectory
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
with TemporaryDirectory() as directory:
image_path = Path(directory) / "sample.png"
plt.imsave(image_path, np.full((3, 3, 3), 0.4))
with Image.open(image_path) as image:
plt.imshow(image)
plt.axis("off")
plt.show()
將暫時範例路徑替換為您自己的圖像路徑,以開啟本機檔案。此途徑需要提供 PIL.Image 的 Pillow。
自訂圖像顯示
要以灰階方式檢視 RGB 資料,請對其三個色彩通道求平均值並選擇灰階色彩對應。下面的 mean(axis=2) 運算假設陣列的第三個軸包含紅色、綠色和藍色通道;它並不適用於每種圖像形狀或色彩模型。內插改變的是 Matplotlib 在螢幕上呈現像素的方式,而不是來源圖像的細節。
import matplotlib.pyplot as plt
import numpy as np
image = np.array(
[
[[1.0, 0.2, 0.1], [0.2, 0.8, 0.3]],
[[0.1, 0.3, 1.0], [0.8, 0.8, 0.8]],
]
)
plt.imshow(image.mean(axis=2), cmap="gray", interpolation="bicubic")
plt.axis("off")
plt.show()
cmap="gray" 將平均值對應為灰色色調。當另一種受支援的色彩對應或內插設定更適合圖像及其檢視方式時,請選擇它。要保留彩色圖像,請將原始陣列而不是平均後的陣列傳遞給 imshow()。顯示選項影響呈現出的檢視;它們不會重寫已載入的像素資料。
儲存顯示的圖形
使用 savefig() 將 Matplotlib 圖形寫入圖像檔案。它儲存圖形(包括其座標軸和版面配置),而不是更改原始圖像。請在呼叫 show() 之前儲存,以便在各種顯示後端下圖形仍可用於儲存操作。
import matplotlib.pyplot as plt
import numpy as np
image = np.full((3, 3, 3), 0.4)
plt.imshow(image)
plt.axis("off")
plt.savefig("displayed-image.png", bbox_inches="tight", pad_inches=0)
plt.show()
路徑 displayed-image.png 相對於目前工作目錄寫入。選擇不同的檔案名或路徑來控制圖形儲存的位置。對於緊密裁剪,bbox_inches="tight" 會裁掉周圍的空白,pad_inches=0 會去掉額外的填補。如果匯出的大小很重要,請在繪圖前設定圖形大小;儲存的檔案是目前 Matplotlib 圖形的呈現結果。