► 前言
本篇將對於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讀取、顯示與儲存圖像能有更深刻的理解,期待下一篇博文吧!
►參考資料
評論