► 前言
本篇將對於OpenCV Python進行介紹,透過程式碼進行OpenCV Python圖像與影片的讀取、顯示、儲存實作,使大家了解OpenCV於影像的操作。
► OpenCV 安裝
使用以下指令在終端機(terminal)或命令提示字元(cmd)中安裝套件。 pip install opencv-python
► OpenCV 讀取與顯示圖片
OpenCV使用以下函數(cv2.imread)來讀取圖像。如果讀取圖像成功將會返回一個NumPy數組,如果獲取失敗將返回None。 cv2.imread讀取圖片參數,其中file_path為讀取圖片路徑,flags為讀取模式,flags默認使用cv.IMREAD_COLOR(加載彩色圖像)。
cv2.imread 具體參數,如下圖。
常見使用flags有三種: cv.IMREAD_COLOR: | 加載彩色圖像。任何圖像的透明度都會被忽視。默認設置。 | cv.IMREAD_GRAYSCALE: | 以灰度模式加載圖像。 | cv.IMREAD_UNCHANGED: | 加載圖像,包括alpha通道。 |
範例程式,讀取彩色圖像與灰色圖像。 # 讀取圖像,默認選擇彩色圖像 image = cv2.imread('image.jpg') # 讀取圖像,選擇灰色圖像 image_gray = cv2.imread('image.jpg', 0)
OpenCV使用以下函數(cv2.imshow)來顯示圖片。cv2.imshow顯示圖片參數,其中 “windows”是圖像顯示的視窗名稱,image為顯示圖像。
將上面程式結合就可以進行圖片讀取與顯示。其中cv2.waitKey為等待按鍵輸入,再透過cv2.destroyAllWindows()函數來關閉所有視窗。 #!/usr/bin/env python3
# -*- coding: utf-8 -*- import cv2 # 讀取圖像,默認選擇彩色圖像 image = cv2.imread('image.jpg') # 讀取圖像,選擇灰色圖像 image_gray = cv2.imread('image.jpg', 0) # 確保圖像成功讀取 if image is None: print('無法讀取彩色圖像檔案') exit() # 確保圖像成功讀取 if image_gray is None: print('無法讀取灰階圖像檔案') exit() # 顯示圖像 cv2.imshow('windows', image) cv2.imshow('windows_gray', image_gray) # 等待按下任意鍵後關閉視窗 cv2.waitKey(0) cv2.destroyAllWindows()
► OpenCV 儲存圖像
OpenCV使用以下函數(cv2.imwrite)來儲存圖像。cv2. imwrite儲存圖像參數,其中cv2.imwrite 可透過圖片的副檔名來指定輸出的圖像格式,image為儲存圖像。
最後將上面的範例組合,就可以透過OpenCV進行圖像的讀取、顯示與儲存。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import cv2 # 讀取圖像,默認選擇彩色圖像 image = cv2.imread('image.jpg')
# 確保圖像成功讀取 if image is None: print('無法讀取彩色圖像檔案') exit()
# 顯示圖像 cv2.imshow('windows', image)
# 將圖像儲存為新的圖像檔案(jpg格式) cv2.imwrite("image.jpg", image)
# 等待按下任意鍵後關閉視窗 cv2.waitKey(0) cv2.destroyAllWindows()
► Q&A
問題一:為甚麼讀取圖像錯誤?
在讀取圖像時,如果指定的圖像路徑不正確,將無法讀取圖像。因此,要確保提供正確的路徑和檔案名稱。建議採用全英文路徑進行讀取。
問題二:彩色轉換問題
在讀取和顯示圖像時,可能會遇到顏色的不一致。這是由於 OpenCV 默認使用 BGR(藍色、綠色、紅色)通道順序, 而其他工具可能使用 RGB(紅色、綠色、藍色)通道順序。因此,需要注意轉換通道順序以確保正確的顯示。
問題三:圖像顯示視窗無響應
在顯示圖像後,視窗可能無響應或凍結,無法關閉。這可能是由於視窗受阻塞或程式停留在 cv2.waitKey() 函數中造成的。 可以嘗試添加適當的 cv2.waitKey() 或使用 cv2.waitKey(1) 在每個迴圈中確保視窗能夠正常響應。
問題四:影像格式不支援
有時候,可能會遇到無法讀取或儲存特定格式的圖像的問題。這可能是由於 OpenCV 版本或編譯配置不支援該圖像格式所致。 在處理圖像前,確保 OpenCV 支援所需的圖像格式。
問題五:圖像品質問題
在儲存圖像時,可能會遇到圖像品質的降低或失真。這可能是由於壓縮參數的設置不正確,例如使用 cv2.imwrite() 函數時, 未指定正確的 JPEG 壓縮品質參數。要確保使用適當的參數設置,以維持圖像的高品質。
►小結
透過以上講解,搭配程式碼進行範例講解與Q&A進行問題解惑,相信各位對於OpenCV讀取、顯示與儲存圖像能有更深刻的理解,期待下一篇博文吧! |