點贊 + 關注 + 收藏 = 學會了
對於剛接觸 opencv 的工友來説,能快速看到圖像處理的效果是很重要的。OpenCV 內置了圖像預覽方法,我在之前的文章裏已經介紹過。
而在 Python 生態裏,有一個更厲害的圖像顯示工具 —— Matplotlib
- OpenCV:這是一個專門用於圖像處理和計算機視覺的開源庫,它能方便地讀取、處理各種圖像。
- Matplotlib:這是 Python 的一個繪圖庫,其中的 pyplot 模塊可以像 MATLAB 一樣創建各種類型的圖表,包括顯示圖像,而且顯示效果直觀,還能在圖像上做一些簡單標註等。
用 OpenCV 讀取圖像後,再用 Matplotlib 顯示,既能利用 OpenCV 的讀取優勢,又能借助 Matplotlib 的顯示優勢。
上手操作
安裝相關庫
如果還沒有安裝這兩個庫,需要先進行安裝。打開命令提示符(Windows)或終端(Mac/Linux),輸入以下命令:
pip install opencv-python
pip install matplotlib
導入庫
在 Python 代碼中,首先要導入需要用到的庫:
import cv2 # 導入OpenCV庫,通常簡寫為cv2
import matplotlib.pyplot as plt # 導入Matplotlib的pyplot模塊,通常簡寫為plt
讀取圖像
用 OpenCV 的imread函數讀取圖像。需要注意的是,要正確填寫圖像的路徑,如果圖像和代碼文件在同一個文件夾裏,直接寫圖像文件名即可;如果不在,要寫完整的路徑。
# 讀取圖像,參數為圖像路徑
img = cv2.imread('圖片路徑')
要是讀取失敗,可能是路徑寫錯了,或者圖像文件損壞了,可以檢查一下這兩個方面。
圖像顏色通道轉換
OpenCV 讀取圖像時,默認的顏色通道是 BGR(藍、綠、紅),而 Matplotlib 顯示圖像時默認的是 RGB(紅、綠、藍)。如果不進行轉換,顯示的圖像顏色會不正常(比如紅色和藍色會顛倒)。所以需要進行通道轉換,用 OpenCV 的cvtColor函數:
# 將BGR格式轉換為RGB格式
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
用 Matplotlib 顯示圖像
做好前面的準備後,就可以用 Matplotlib 顯示圖像了:
# 創建一個圖像窗口
plt.figure()
# 顯示圖像,參數為要顯示的圖像
plt.imshow(img_rgb)
# 隱藏座標軸,讓圖像顯示更整潔
plt.axis('off')
# 顯示圖像
plt.show()
完整的代碼及展示效果
我在項目裏創建了一個 images 目錄,把 雷猴.jpeg 圖片放在裏面。
import cv2 # 導入OpenCV庫,通常簡寫為cv2
import matplotlib.pyplot as plt # 導入Matplotlib的pyplot模塊,通常簡寫為plt
# 讀取圖像,參數為圖像路徑
img = cv2.imread('./images/雷猴.jpeg')
# 將BGR格式轉換為RGB格式
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 創建一個圖像窗口
plt.figure()
# 顯示圖像,參數為要顯示的圖像
plt.imshow(img_rgb)
# 隱藏座標軸,讓圖像顯示更整潔
plt.axis('off')
# 顯示圖像
plt.show()
關鍵方法講解
plt.figure
使用 plt.figure() 創建了一個圖像窗口。
plt.figure 的語法:
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
- num:圖像窗口的標識,可以是整數或字符串。如果未指定,會自動遞增生成;若指定相同的值,會複用已有的窗口。
- figsize:以元組形式指定窗口的大小,格式為(寬, 高),單位是英寸。例如figsize=(8, 6)表示窗口寬 8 英寸,高 6 英寸。
- dpi:指定圖像的分辨率,即每英寸的像素數,數值越大圖像越清晰。
- facecolor:窗口的背景顏色,默認是白色。
- edgecolor:窗口邊緣的顏色。
- frameon:布爾值,是否顯示窗口的邊框,默認為True(顯示)。
plt.imshow
plt.imshow() 的作用是將圖像數據加載到創建的圖像窗口中,是顯示圖像的核心步驟。
plt.imshow(X, cmap=None, aspect=None, interpolation=None)
- X:要顯示的圖像數據,可以是數組形式。對於彩色圖像,通常是三維數組(高度, 寬度, 通道數);對於灰度圖像,是二維數組(高度, 寬度)。
- cmap:指定顏色映射表,用於灰度圖像或單通道圖像的顏色顯示。默認是viridis,顯示彩色時一般不用設置,顯示灰度圖時需設置為'gray'。
- aspect:控制圖像的寬高比,'auto'表示自動調整以適應窗口,'equal'表示保持圖像原始的寬高比。
- interpolation:指定圖像縮放時的插值方法,如'nearest'(最近鄰插值)、'bilinear'(雙線性插值)等,影響圖像縮放後的平滑程度。
plt.axis
plt.axis() 可以控制座標軸的顯示狀態或範圍,在顯示圖像時設置為'off'可以讓圖像顯示更簡潔。
如果上面代碼把 plt.axis('off') 這句註銷掉的話,展示的圖像左側及下方都會顯示座標軸。
plt.axis 的語法如下:
plt.axis(arg)
- arg可以是'on'(顯示座標軸)、'off'(隱藏座標軸),也可以是一個列表[xmin, xmax, ymin, ymax],用於指定座標軸的範圍。
plt.show
plt.show() 顯示所有創建的圖像窗口,將之前通過plt.imshow等方法加載的圖像內容呈現出來。在腳本中,必須調用該方法才能看到圖像;在交互式環境(如 Jupyter Notebook)中,有時會自動顯示,但顯式調用更穩妥。
進階玩法
顯示灰度圖像
如果想顯示灰度圖像,步驟略有不同。OpenCV 讀取灰度圖像時,可以在imread函數中添加參數cv2.IMREAD_GRAYSCALE,此時讀取的圖像是單通道的,不需要進行顏色通道轉換。
只需在上一個例子裏該一句代碼
# 讀取圖像,參數為圖像路徑
img = cv2.imread('./images/雷猴.jpeg', cv2.IMREAD_GRAYSCALE)
多圖對比顯示
在處理圖像時,經常需要對比原圖和處理後的圖像,Matplotlib 的subplot函數可以實現多圖在同一窗口顯示。
import cv2 # 導入OpenCV庫,通常簡寫為cv2
import matplotlib.pyplot as plt # 導入Matplotlib的pyplot模塊,通常簡寫為plt
# 讀取圖像,參數為圖像路徑
img = cv2.imread('./images/雷猴.jpeg')
# 將BGR格式轉換為RGB格式
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 將原圖轉為灰度圖
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 創建一個2行1列的子圖佈局
plt.subplot(2, 1, 1) # 第1行第1列的子圖
plt.imshow(img_rgb)
plt.title('origin') # 給子圖添加標題
plt.axis('off')
plt.subplot(2, 1, 2) # 第2行第1列的子圖
plt.imshow(gray_img, cmap='gray')
plt.title('gray')
plt.axis('off')
# 調整子圖之間的間距
plt.show()
關鍵方法講解
plt.subplot
plt.subplot() 的作用是在一個圖像窗口中創建多個子圖,實現多幅圖像的對比顯示。例如plt.subplot(2, 1, 1)表示創建一個 2 行 1 列的子圖佈局,當前操作第 1 個子圖。
語法:
plt.subplot(nrows, ncols, index)
- nrows:子圖的行數。
- ncols:子圖的列數。
- index:當前子圖的索引,從 1 開始,按行優先順序排列。
以上就是本文的全部內容啦,想了解更多 OpenCV 的玩法,歡迎關注 《OpenCV-Python 中文教程》
也可以➕我 green bubble 吹吹水咯
點贊 + 關注 + 收藏 = 學會了