- 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
flag_mouse_lbutton_down = False
point_x = -1
point_y = -1
def draw_circle(event, x, y, flags, param):
global flag_mouse_lbutton_down, point_x, point_y
print(event, x, y, flags, param)
# 鼠标左键按下
if event == cv2.EVENT_LBUTTONDOWN:
flag_mouse_lbutton_down = True
point_x = x
point_y = y
cv2.circle(image, (x, y), 1, (0, 0, 255), thickness=2)
if event == cv2.EVENT_LBUTTONUP:
flag_mouse_lbutton_down = False
cv2.rectangle(image, (point_x, point_y), (x, y), (0, 0, 255), 2)
image_path = "opencv-image.png"
image = cv2.imread(image_path)
cv2.namedWindow("image")
cv2.setMouseCallback("image", draw_circle)
while True:
cv2.imshow("image", image)
# waitKey 不能为0,必须有值,才可以刷新image
# 鼠标点×是关不掉的,只能键盘输入q
if cv2.waitKey(1) == ord("q"):
break
cv2.destroyAllWindows()
运行结果
/home/coder/anaconda3/bin/python3.8 /home/coder/PycharmProjects/pythonProject2/main.py
0 274 451 0 None
0 185 412 0 None
0 162 398 0 None
0 6 208 0 None
0 6 208 0 None
0 17 198 0 None
0 30 189 0 None
0 36 184 0 None
0 41 177 0 None
......此处省略大部分内容......
0 151 38 0 None
0 151 34 0 None
0 151 30 0 None
0 151 26 0 None
0 151 21 0 None
0 151 15 0 None
0 151 11 0 None
0 151 6 0 None
0 149 0 0 None
Process finished with exit code 0
- 这份代码在过程的效果中是黑盒,用户看不到矩形框动态。
- 正在探索 矩形框随着鼠标的移动而变化大小,就像一些截图软件中的标注框功能似的
- 似乎实现的关键在于创建一个新的纯净副本
学习推荐
- Python文档 - English
- Python文档 - 中文
- Python规范 PEP
- Python规范 google版
- opencv
- opencv 帮助手册
- Python 源码
- Python PEP
- 优麒麟
- 掘金平台
- gitee平台
Python具有开源、跨平台、解释型、交互式等特性,值得学习。
Python的设计哲学:优雅,明确,简单。提倡用一种方法,最好是只有一种方法来做一件事。
代码的书写要遵守规范,这样有助于沟通和理解。
每种语言都有独特的思想,初学者需要转变思维、踏实践行、坚持积累。