python学习:opencv+用鼠标画矩形和圆形

目录

步骤

定义数据

新建一个窗口黑色画布

显示黑色画布

添加鼠标回调函数

循环

一直显示图片

[一直判断有没有按下字母 m](#一直判断有没有按下字母 m)

关闭所有窗口

鼠标回调函数


步骤

当鼠标按下记录坐标并记录鼠标标记位为true,移动的时候就会不断的画矩形或者圆,松下的时候就再画一个然后并记录鼠标标记位为flase

定义数据

复制代码
# 如果按下鼠标,则为 true
drawing = False
# 如果为 True,则绘制矩形。按"m"切换到曲线
mode = True
# 记录前面鼠标按下的坐标
ix = -1
iy = -1

新建一个窗口黑色画布

复制代码
img = np.zeros((512, 512, 3), np.uint8)

显示黑色画布

复制代码
cv.namedWindow('image')

添加鼠标回调函数

复制代码
cv.setMouseCallback('image', draw_circle)

循环

复制代码
while 1:

一直显示图片

复制代码
cv.imshow('image', img)

一直判断有没有按下字母 m

复制代码
k = cv.waitKey(1) & 0xFF
    if k == ord('m'):
        mode = not mode
    elif k == 27:
        break

关闭所有窗口

复制代码
cv.destroyAllWindows()

鼠标回调函数

复制代码
def draw_circle(event, x, y, flags, param):
    if flags:
        print("1")
    if param:
        print("1")
    global ix, iy, drawing, mode
    if event == cv.EVENT_LBUTTONDOWN:
        drawing = True
        ix, iy = x, y
    elif event == cv.EVENT_MOUSEMOVE:
        if drawing:
            if mode:
                cv.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)
            else:
                cv.circle(img, (x, y), 5, (0, 0, 255), -1)
    elif event == cv.EVENT_LBUTTONUP:
        drawing = False
        if mode:
            cv.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)
        else:
            cv.circle(img, (x, y), 5, (0, 0, 255), -1)
相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码6 天前
嵌入式学习路线
学习
毛小茛6 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J6 天前
从“Hello World“ 开始 C++
c语言·c++·学习