Opencv學習筆記————處理鼠標事件

直接上代碼

import cv2
import numpy as np

# 當鼠標按下時變爲 True
drawing = False
# 如果 mode 爲 true 繪製矩形。按下 'm' 變成繪製曲線。
mode = True
ix, iy = -1, -1
flag = 0
# 創建畫布
img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow('image')


# 定義事件處理函數
def draw_circle(event, x, y, flags, param):
    global ix, iy, drawing, mode
    # 當按下左鍵按下是記錄初始位置座標
    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        ix, iy = x, y
    # 當鼠標左鍵按下並移動是繪製圖形。 event 可以查看移動 flag 查看是否按下
    elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
        if drawing:
            if mode:
                # 矩形輪廓(無填充)
                cv2.rectangle(img, (ix, iy), (ix+10, iy+10), (0, 250, 0), 1)
                # cv2.rectangle(img, (ix, iy), (x, y), (0, 250, 0), -1)實心圖形
            else:
                cv2.circle(img, (x, y), 3, (0, 255, 255), -1)
    elif event == cv2.EVENT_LBUTTONUP:
        # 鬆開停止繪畫
        drawing = False


# 綁定事件處理函數
cv2.setMouseCallback('image', draw_circle)

while 1:
    cv2.imshow('image', img)
    flag = cv2.waitKey(1) & 0xFF
    if flag == ord('q'):
        break
    elif flag == ord('m'):
        # 取反操作
        mode = not mode
cv2.destroyAllWindows()


注意事項:
1.所有的鼠標事件的回調函數都有統一的格式,不需要修改
2.需要綁定事件處理函數
3.明確事件的內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章