用imshow()顯示一幅圖像:
imshow()函數有兩個參數:顯示圖像的視窗以及要顯示的圖像本身。
在視窗顯示攝像頭幀:
OpenCV的namedWindeow(),imshow()和DestrWindeow()函數允許指定函數名來建立,顯示和銷毀(destroy)視窗。通過waitKey()函數來擷取鍵盤輸入,通過setMouseCallback()函數擷取滑鼠輸入:
下面是擷取攝像頭圖像的程式:
waitkey()的參數等待鍵盤觸發時間,機關為毫秒,其傳回值為-1(表示沒有鍵被按下)或ASCII碼。
Python提供一個ord()函數可以将字元轉換為ASCII碼。例如,輸入ord('a')會傳回97。
Opencv的視窗函數和waitKey()函數互相依賴。Opencv的視窗隻有在調用waitKey()函數是才會更新,waitKey()函數隻有在Opencv1視窗稱為活動視窗時才能捕輸入資訊。
滑鼠毀掉函數setMouseCallback()有五個參數,param為可選參數,它是setMouseCallback()函數的第三個參數,預設下參數是0.回調事假參數時間可以如下取值,他們分别對應的滑鼠事件:
cv2.EVENT_MOUSEMOVE:滑鼠移動
cv2.EVENT_LBUTTONDOWN:滑鼠左鍵按下
cv2.EVENT_RBUTTONDOWN:滑鼠右鍵按下
cv2.EVENT_MBUTTONDOWN:滑鼠中間鍵按下
cv2.EVENT_LBUTTONUP:滑鼠左鍵松開
cv2.EVENT_RBUTTONUP:滑鼠右鍵松開
cv2.EVENT_MBUTTONUP:滑鼠中間鍵松開
cv2.EVENT_LBUTTONDBLCLK:輕按兩下滑鼠左鍵
cv2.EVENT_RBUTTONDBLCLK:輕按兩下滑鼠右鍵
cv2.EVENT_MBUTTONDBLCLK:輕按兩下滑鼠中間鍵
滑鼠回調的标志參數可能是以下時間的按位組合:
cv2.EVNET_FLAG_LBUTTON:事件對應按下滑鼠左鍵
cv2.EVNET_FLAG_RBUTTON:事件對應按下滑鼠右鍵
cv2.EVNET_FLAG_MBUTTON:事件對應按下滑鼠中間鍵
cv2.EVNET_FLAG_CTRLKEY:事件對應按下Ctrl鍵
cv2.EVNET_FLAG_SHIFTKEY:事件對應按下Shift鍵
cv2.EVNET_FLAG_ALTKEY:事件對應按下Alt鍵
Opencv不提供任何處理視窗事件的方法,如單擊視窗的關閉按鈕時,并不能關閉程式。
Cameo項目簡介:
針對不同場景,Opencv應用的一般套路:
先建立一個抽象層,然後通過一個應用來建構學習OpenCV的架構,但每一步都會設計該應用的一個元件(component),以使該應用具有擴充性。
Cameo——面向對象的設計
在應用中将I/O代碼與應用程式代碼分離會變得更加友善。
可建立CaptureManager類和WindowManager類作為進階的I/O流接口。在應用程式的代碼中可以使用CaptureManager來讀取新的幀,并将幀分派到一個或多個輸出中,這些包括靜止的圖像檔案,視訊檔案以及視窗(通過WindowManager類實作)WindowManager類使應用程式代碼能以面對對象的形式處理視窗和事件。
CaptureManager和WindowManager都具有可擴充性,實作不用依賴OpenCV的I/O。