OpenCV Python – 如何使用滑鼠事件繪製曲線?


存在不同型別的滑鼠事件,例如左鍵或右鍵單擊、滑鼠移動、左鍵雙擊等。OpenCV 提供了不同型別的滑鼠事件,例如用於滑鼠左鍵按下事件的 `cv2.EVENT_LBUTTONDOWN`,用於左鍵雙擊事件的 `cv2.EVENT_LBUTTONDBLCLK` 等。滑鼠事件返回滑鼠事件的座標 `(x,y)`。

為了在事件發生時執行操作,我們定義一個滑鼠 **回撥函式**。我們使用 `cv2.EVENT_LBUTTONDOWN`、`cv2.EVENT_MOUSEMOVE` 和 `cv2.EVENT_LBUTTONUP` 滑鼠事件在影像上繪製曲線。

步驟

要使用滑鼠事件繪製曲線,請按照以下步驟操作:

  • 匯入所需的庫 **OpenCV**。確保已安裝。

  • 建立一個黑色影像。我們在黑色影像上繪製曲線。我們也可以使用 `cv2.imread()` 方法讀取影像並在其上繪製曲線。

  • 定義一個滑鼠回撥函式 `draw_curve` 來在影像上繪製曲線。當滑鼠事件發生時,會執行滑鼠回撥函式。滑鼠事件提供滑鼠事件的座標。為了繪製曲線,我們在滑鼠移動時繪製小圓圈。

  • 建立一個視窗“**曲線視窗**”並將滑鼠回撥函式 `draw_curve` 繫結到此視窗。

  • 顯示影像視窗“**曲線視窗**”。此視窗開啟我們繪製圓圈的影像。要關閉視窗,請按 Esc 鍵。

讓我們來看一些使用滑鼠事件在影像上繪製曲線的 Python 程式。

示例

在這個 Python 示例中,我們使用三個滑鼠事件 `cv2.EVENT_LBUTTONDOWN`、`cv2.EVENT_MOUSEMOVE` 和 `cv2.EVENT_LBUTTONUP` 繪製曲線。

# import required libraries import cv2 import numpy as np drawing = False # true if mouse is pressed ix,iy = -1,-1 # define mouse callback function to draw circle def draw_curve(event, x, y, flags, param): global ix, iy, drawing, img if event == cv2.EVENT_LBUTTONDOWN: drawing = True elif event == cv2.EVENT_MOUSEMOVE: if drawing == True: cv2.circle(img, (x, y), 3,(0, 0, 255),-1) elif event == cv2.EVENT_LBUTTONUP: drawing = False cv2.circle(img, (x, y), 3,(0, 0, 255),-1) # Create a black image img = np.zeros((512,700,3), np.uint8) # Create a window and bind the function to window cv2.namedWindow("Curve Window") # Connect the mouse button to our callback function cv2.setMouseCallback("Curve Window", draw_curve) # display the window while True: cv2.imshow("Curve Window", img) if cv2.waitKey(10) == 27: break cv2.destroyAllWindows()

輸出

執行上述 Python 程式碼後,它將開啟一個視窗“**曲線視窗**”,顯示一個黑色影像。要繪製曲線,首先按下滑鼠左鍵(`EVENT_LBUTTONDOWN`)並移動滑鼠(`EVENT_MOUSEMOVE`),然後釋放按鈕(`EVENT_LBUTTONUP`)。移動滑鼠時,在每個點繪製小圓圈,釋放按鈕時,看起來像一條曲線。請參見以下螢幕截圖。


更新於:2022年12月2日

2K+ 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始學習
廣告