OpenCV Python – 如何使用滑鼠事件繪製圓形?


有不同型別的滑鼠事件,例如左鍵或右鍵單擊、滑鼠移動、左鍵雙擊等。OpenCV 為我們提供了不同型別的滑鼠事件,例如用於滑鼠左鍵按下事件的 **cv2.EVENT_LBUTTONDOWN**、用於右鍵按下事件的 **cv2.EVENT_RBUTTONDOWN**、用於左鍵雙擊事件的 **cv2.EVENT_LBUTTONDBLCLK** 等。

滑鼠事件返回滑鼠事件的座標 (x,y)。為了在事件發生時執行操作,我們定義了一個滑鼠 **回撥函式**。我們使用滑鼠事件在影像上繪製圓形。

步驟

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

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

  • 建立一個黑色影像。我們在此黑色影像上繪製圓形。我們還可以使用 **cv2.imread()** 方法讀取影像並在其上繪製圓形。

  • 定義一個滑鼠 **回撥函式** 以在影像上繪製圓形。當滑鼠事件發生時,將執行滑鼠 **回撥函式**。滑鼠事件給出滑鼠事件的座標。在這裡,我們定義了一個滑鼠 **回撥函式**,以便在滑鼠左鍵按下時繪製圓形。

  • 建立一個視窗並將滑鼠 **回撥函式** 繫結到此視窗。

  • 顯示影像視窗。此視窗開啟我們在其上繪製圓形的影像。要關閉視窗,請按 **esc** 鍵。

讓我們看一些程式示例,以瞭解它是如何工作的。

示例

在此 Python 程式中,我們在按下滑鼠左鍵時繪製圓形。

# Import required libraries import cv2 import numpy as np # define an image (black) on which the circle to be drawn img = np.zeros((512,700,3), np.uint8) # define mouse callback function to draw circle def draw_circle(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: cv2.circle(img, (x, y), 100, (0, 255, 255), 2) # Create a window cv2.namedWindow("Circle Window") # bind the callback function to the window cv2.setMouseCallback("Circle Window", draw_circle) # display the image while True: cv2.imshow("Circle Window", img) if cv2.waitKey(20) & 0xFF == 27: break cv2.destroyAllWindows()

執行上述 Python 程式碼後,它將開啟一個名為“圓形視窗”的視窗,顯示一個黑色影像。在視窗上左鍵單擊,將繪製一個半徑為 100 畫素的圓形。請參閱以下輸出視窗,我們繪製了五個圓形。

輸出


示例

在此 Python 程式中,我們使用拖動滑鼠繪製圓形。圓形以不同的半徑繪製。

import numpy as np import cv2 import math drawing = False # true if mouse is pressed ix, iy = -1, -1 # define mouse callback function to draw circle def draw_circle(event, x, y, flags, param): global ix, iy, drawing if event == cv2.EVENT_LBUTTONDOWN: drawing = True # we take note of where that mouse was located ix, iy = x, y elif event == cv2.EVENT_MOUSEMOVE: drawing == True elif event == cv2.EVENT_LBUTTONUP: radius = int(math.sqrt(((ix - x) ** 2) + ((iy - y) ** 2))) cv2.circle(img, (ix, iy), radius, (255, 0, 255), thickness=2) drawing = False # Create a black image img = np.zeros((512, 700, 3), np.uint8) # Create a window cv2.namedWindow('Drag Circle Window') # bind the callback function to above defined window cv2.setMouseCallback('Drag Circle Window', draw_circle) # display the image while True: cv2.imshow('Drag Circle Window', img) k = cv2.waitKey(1) & 0xFF if k == 27: break cv2.destroyAllWindows()

執行上述 Python 程式碼後,它將開啟一個視窗,顯示一個黑色影像。我們可以透過拖動滑鼠在其上繪製圓形。繪製圓形的過程是首先按下滑鼠左鍵 **(EVENT_LBUTTONDOWN)** 並移動滑鼠 **(EVENT_MOUSEMOVE)**,然後釋放按鈕 **(EVENT_LBUTTONUP)**。

輸出


示例

在此 Python 程式中,我們使用滑鼠在輸入影像上雙擊繪製填充圓形。

import numpy as np import cv2 # mouse callback function def draw_circle(event,x,y,flags,param): if event == cv2.EVENT_LBUTTONDBLCLK: cv2.circle(img,(x,y),100,(255,0,0),-1) # read the input image img = cv2.imread('3D.jpg') # Create a window cv2.namedWindow('Filled Circle Window') # bind the callback function to window cv2.setMouseCallback('Filled Circle Window', draw_circle) # display the image while True: cv2.imshow('Filled Circle Window', img) if cv2.waitKey(1) & 0xFF == 27: break cv2.destroyAllWindows()

執行上述 Python 程式碼後,它將開啟一個視窗,顯示輸入影像。要在影像中繪製填充圓形,請在影像中的某個點雙擊 (EVENT_LBUTTONDBLCLK)。

輸出


更新於: 2022-12-02

2K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告