Opencv Python – 如何顯示影像上點選點的座標?


OpenCV 為我們提供了不同型別的滑鼠事件。有不同型別的滑鼠事件,例如左鍵或右鍵單擊、滑鼠移動、左鍵雙擊等。滑鼠事件返回滑鼠事件的座標 (x,y)。為了在事件發生時執行操作,我們定義了一個滑鼠回撥函式。我們使用左鍵單擊(cv2.EVENT_LBUTTONDOWN)和右鍵單擊(cv2.EVENT_RBUTTONDOWN)來顯示影像上點選點的座標。

步驟

要顯示輸入影像上點選點的座標,您可以按照以下步驟操作:

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

  • 定義一個滑鼠回撥函式來顯示輸入影像上點選點的座標。當滑鼠事件發生時,會執行滑鼠回撥函式。滑鼠事件給出滑鼠事件的座標 (x, y)。這裡我們定義一個滑鼠回撥函式,當執行滑鼠左鍵單擊 (EVENT_LBUTTONDOWN) 或右鍵單擊 (EVENT_RBUTTONDOWN) 時,顯示輸入影像上點選點的座標。在這個回撥函式中,我們將座標顯示為文字,並將點顯示為半徑很小的圓。

  • 使用cv2.imread()函式讀取輸入影像。

  • 定義一個新視窗,並使用cv2.setMouseCallback()將上面定義的回撥函式繫結到該視窗。

  • 顯示影像視窗。此視窗開啟輸入影像,我們在該影像上顯示滑鼠事件發生點的座標。要關閉視窗,請按esc鍵。

讓我們看一些程式示例,以便更好地理解。

輸入影像

我們將在下面的示例中使用此影像作為輸入檔案。


示例

在下面的 Python 程式碼中,我們在執行影像上的左鍵單擊 (EVENT_LBUTTONDOWN) 時顯示點的座標。我們還在影像上繪製這些點。

# import the required library import cv2 # define a function to display the coordinates of # of the points clicked on the image def click_event(event, x, y, flags, params): if event == cv2.EVENT_LBUTTONDOWN: print(f'({x},{y})') # put coordinates as text on the image cv2.putText(img, f'({x},{y})',(x,y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) # draw point on the image cv2.circle(img, (x,y), 3, (0,255,255), -1) # read the input image img = cv2.imread('back2school.jpg') # create a window cv2.namedWindow('Point Coordinates') # bind the callback function to window cv2.setMouseCallback('Point Coordinates', click_event) # display the image while True: cv2.imshow('Point Coordinates',img) k = cv2.waitKey(1) & 0xFF if k == 27: break cv2.destroyAllWindows()

輸出

執行以上程式碼後,將產生以下輸出

(77,119)
(327,57)
(117,217)
(351,194)
(509,271)
(264,364)
(443,117)

我們得到以下視窗顯示輸出


在上面的輸出影像中,點以黃色繪製,點座標以紅色繪製。

示例

在此示例中,我們在執行影像上的左鍵單擊 (EVENT_LBUTTONDOWN) 或右鍵單擊 (EVENT_RBUTTONDOWN) 時顯示點的座標。我們還在影像上繪製這些點。

# import required library import cv2 # function to display the coordinates of the points clicked on the image def click_event(event, x, y, flags, params): # checking for left mouse clicks if event == cv2.EVENT_LBUTTONDOWN: print('Left Click') print(f'({x},{y})') # put coordinates as text on the image cv2.putText(img, f'({x},{y})', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2) cv2.circle(img, (x, y), 3, (0, 0, 255), -1) if event == cv2.EVENT_RBUTTONDOWN: print('Right Click') print(f'({x},{y})') # put coordinates as text on the image cv2.putText(img, f'({x},{y})', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2) cv2.circle(img, (x, y), 3, (0, 0, 255), -1) # read the input image img = cv2.imread('back2school.jpg') # create a window cv2.namedWindow('Point Coordinates') # bind the callback function to window cv2.setMouseCallback('Point Coordinates', click_event) # display the image while True: cv2.imshow('Point Coordinates', img) k = cv2.waitKey(1) & 0xFF if k == 27: break cv2.destroyAllWindows()

輸出

執行以上程式碼後,將產生以下輸出

Left Click
(84,95)
Left Click
(322,66)
Right Click
(262,160)
Right Click
(464,274)
Right Click
(552,45)
Left Click
(162,337)
Left Click
(521,140)
Right Click
(101,243)
Left Click
(463,386)
Right Click
(58,418)

我們得到以下視窗,顯示輸出


在上面的輸出影像中,點以紅色繪製,點座標(左鍵單擊)以藍色繪製,點座標(右鍵單擊)以黃色繪製。

更新於: 2022-12-05

14K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.