opencv(py) setMouseCallback 监听鼠标点击事件 在点击处画圆圈

623 阅读2分钟
  •        Python : 3.8.11
  • opencv-python : 4.1.2.30
  • opencv-contrib-python : 4.1.2.30
  •          OS : Ubuntu Kylin 20.04
  •       Conda : 4.10.1
  •     Pycharm : 2021.1.3

代码示例

import cv2
import numpy as np


def draw_circle(event, x, y, flags, param):
    print(event, x, y, flags, param)

    # 鼠标左键按下,画绿圈
    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.circle(image, (x, y), 20, (0, 255, 0), 3)

    # 鼠标左键抬起来,画蓝圈
    if event == cv2.EVENT_LBUTTONUP:
        cv2.circle(image, (x, y), 20, (255, 0, 0), 5)


# 500 * 500 的黑色画布
image = np.zeros((500, 500, 3), np.uint8)
cv2.namedWindow("image")
# 监听事件,设置回调函数
cv2.setMouseCallback("image", draw_circle)

while True:
    cv2.imshow("image", image)
    # waitKey 不能为0,必须有值,才可以刷新image
    # 鼠标点×是关不掉的,只能键盘输入q
    if cv2.waitKey(10) == ord("q"):
        break

cv2.destroyAllWindows()

运行结果

cv-mouse-call-back-1.png

/home/coder/anaconda3/bin/python3.8 /home/coder/PycharmProjects/pythonProject2/main.py
0 481 103 0 None
0 389 88 0 None

。。。此处省略大部分。。。

0 345 21 0 None
0 347 20 0 None
0 348 20 0 None
0 349 20 0 None
0 351 20 0 None
0 352 19 0 None
0 354 18 0 None
0 357 18 0 None
0 360 17 0 None
0 367 15 0 None
0 370 13 0 None
0 375 11 0 None
0 377 10 0 None
0 381 8 0 None
0 382 8 0 None
0 385 8 0 None
0 388 7 0 None
0 393 5 0 None
0 397 4 0 None
0 403 2 0 None

Process finished with exit code 0

学习推荐


Python具有开源、跨平台、解释型、交互式等特性,值得学习。
Python的设计哲学:优雅,明确,简单。提倡用一种方法,最好是只有一种方法来做一件事。
代码的书写要遵守规范,这样有助于沟通和理解。
每种语言都有独特的思想,初学者需要转变思维、踏实践行、坚持积累。