Python | OpenCV 滑鼠與鍵盤事件互動
📚 前言
在前一篇我們學會了 光流分析 (Optical Flow)。
這一篇要介紹 滑鼠與鍵盤事件互動,這是 OpenCV 提供的基礎功能之一。
透過事件回呼 (callback) 與按鍵控制,我們可以讓程式更具互動性,例如:
- 滑鼠點擊選取 ROI 區域
- 按鍵控制圖片顯示或儲存
- 結合互動操作進行物件追蹤或圖片編輯
🔎 原理說明
- 滑鼠事件:透過
cv2.setMouseCallback()設定事件回呼函式,偵測滑鼠在視窗中的操作。 - 鍵盤事件:透過
cv2.waitKey()取得使用者按下的鍵盤按鍵,進行互動控制。
🧠 函式與參數說明
📌 cv2.setMouseCallback()
用途:設定滑鼠事件回呼函式。
1 | cv2.setMouseCallback("Window", mouse_event) |
- “Window”:視窗名稱。
- mouse_event:自訂的事件函式。
📌 滑鼠事件回呼函式
1 | def mouse_event(event, x, y, flags, param): |
- event:事件類型,例如
cv2.EVENT_LBUTTONDOWN(左鍵按下)、cv2.EVENT_RBUTTONDOWN(右鍵按下)、cv2.EVENT_MOUSEMOVE(滑鼠移動)。 - x, y:滑鼠座標位置。
- flags:事件狀態,例如是否按下 Ctrl、Shift。
- param:額外參數,可自訂傳入。
🏷️ 常見滑鼠事件 (event)
cv2.EVENT_LBUTTONDOWN:左鍵按下cv2.EVENT_LBUTTONUP:左鍵放開cv2.EVENT_RBUTTONDOWN:右鍵按下cv2.EVENT_RBUTTONUP:右鍵放開cv2.EVENT_MBUTTONDOWN:中鍵按下cv2.EVENT_MOUSEMOVE:滑鼠移動cv2.EVENT_LBUTTONDBLCLK:左鍵雙擊
🏷️ 常見滑鼠旗標 (flags)
cv2.EVENT_FLAG_CTRLKEY:Ctrl 鍵按下cv2.EVENT_FLAG_SHIFTKEY:Shift 鍵按下cv2.EVENT_FLAG_ALTKEY:Alt 鍵按下cv2.EVENT_FLAG_LBUTTON:左鍵按住cv2.EVENT_FLAG_RBUTTON:右鍵按住cv2.EVENT_FLAG_MBUTTON:中鍵按住
📌 cv2.waitKey()
用途:等待鍵盤事件。
1 | key = cv2.waitKey(0) |
- 0:無限等待。
- 正數:等待指定毫秒數。
- 回傳值:按下的鍵盤代碼 (ASCII)。
🏷️ ASCII 簡介
- ASCII (American Standard Code for Information Interchange):一種字元編碼標準,用數字表示字母、數字與符號。
- 例如:
ord('a') = 97,ord('A') = 65。 - 在 OpenCV 中,
cv2.waitKey()會回傳按鍵的 ASCII 值,我們可以用ord()來比對。

圖:ASCII 編碼表
來源:ASCII 編碼表
💻 範例程式 — 滑鼠事件互動
1 | import cv2 |

圖:滑鼠事件互動,點擊位置會顯示圓點或方框
💻 範例程式 — 滑鼠事件互動 (座標、畫點、連線)
1 | import cv2 |

圖:滑鼠事件互動,點擊位置會顯示圓點並連線
💻 範例程式 — 滑鼠圈選框框並馬賽克化
1 | import cv2 |

圖:滑鼠事件互動,圈選框框後該區域會被馬賽克化
💻 範例程式 — 鍵盤事件互動 (調整亮度與對比度)
1 | import cv2 |

圖:鍵盤事件互動,透過鍵盤調整亮度與對比度
💻 範例程式 — 鍵盤事件互動
1 | import cv2 |

圖:鍵盤事件互動,支援滑鼠畫點,並可透過 s 鍵儲存圖片、c 鍵清除畫面、q 鍵退出
⚠️ 注意事項
- 滑鼠事件必須搭配
cv2.namedWindow()與cv2.setMouseCallback()使用。 cv2.waitKey()的回傳值需搭配ord()判斷字元。- 不同作業系統的鍵盤代碼可能略有差異。
- 建議在迴圈中使用
cv2.waitKey(1),避免程式卡住 - 滑鼠事件與鍵盤事件可以結合,例如:滑鼠框選 ROI,再用鍵盤確認或儲存。
📊 應用場景
- ROI 選取:透過滑鼠框選物件區域。
- 互動式標註:人工標記圖片中的特徵點。
- 遊戲互動:結合鍵盤控制與圖片顯示。
- 圖片編輯:透過滑鼠與鍵盤操作進行裁切、儲存。
🎯 結語
本篇我們學會了如何使用 OpenCV 滑鼠與鍵盤事件互動,透過事件回呼與按鍵控制,讓程式更具互動性。
這些技術在 ROI 選取、圖片標註、互動式應用中非常常見,後續可以結合物件追蹤或光流分析,打造更完整的互動系統。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
註:以上參考了
OpenCV Tutorials
OpenCV-Python Tutorials
Pexels — 免費影片素材
