簡介
OpenCV 是 Open Source Computer Vision 的縮寫,由英特爾 (Intel) 於 1999 年推出,使用 C/ C++ 編寫的圖像和視頻處理庫,可以在 C#,Python 和 Java 調用。 OpenCV 用於各種圖像和視頻分析,比如人臉追蹤及辨識、車牌辨識、照片編輯、機器人視覺、光學字符辨識等等。學習視覺辨識當然要由圖片及影片處理開始,這也是為什麼一開始就要介紹 OpenCV 這套件的原因。
安裝
在 Python 安裝 OpenCV 套件時,會將 C/C++所寫成的函數庫一併安裝,所以安裝時需花費一段時間,安裝指令如下
pip install opencv-python matplotlib
讀取圖檔
使用 OpenCV 讀取圖檔使用 cv2.imread() 指定圖片檔名即可,然後使用 cv2.imshow() 顯示圖片。顯示圖片後會一閃就結束,所以另需使用 cv2.waitKey(0) 等待使用者按下任何鍵結束。
import cv2
img=cv2.imread('1.jpg')
#img=cv2.resize(img, (1024,768), interpolation=cv2.INTER_CUBIC)
cv2.namedWindow('Title', cv2.WINDOW_NORMAL)
cv2.imshow('Title', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imread() 讀取的 img 為 numpy 三維陣列,在讀取時第二個參數可以指定如下
cv2.IMREAD_COLOR:預設值, 讀取RGB三個channels,忽略透明度
cv2.IMREAD_GRAYSCALE : 讀取灰階格式
cv2.IMREAD_UNCHANGED : 讀取所有channels, 包含透明度
waitKey
cv2.waitKey() 裏面的參數是指要等待多少 ms ,比如 cv2.waitkey(1) 則會停頓 1ms 去偵測是否有按鍵被按下。如果在這 1ms 沒有按鍵被按下,就執行下一行的指令。
如果是 cv2.waitkey(0),則會無限期的一直等待,直到任何一按鍵被按下才會執行下一行指令。
cv2.waitkey() 會傳回被按下按鍵的 ASCIl 碼,所以如果要判定是否某一個字元被按下,需使用 ord將字元轉成ASCII碼,如下所示
key=cv2.waitkey(0)
if key==ord('q') or key==27: #按下 'q' 或 ESC
do something
寫入圖片
Pillow中文檔名
Pillow可以直接讀取中文檔名,然後再轉成OpenCV格式即可
視訊擷取
若電腦有安裝USB Web Cam,亦可以使用OpenCV擷取影像。第一支USB Web Cam,使用cv2.VideoCapture(0)即可抓取裝置。底下程式碼會顯示視訊,按下 ESC即可停止。
