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)
相关推荐
Amazing_Cacao1 小时前
CFCA精品可可产区风土体系(亚洲):彻底拒绝应试背诵,将感官复核作为检验真实物理差异的唯一铁律
学习
caimouse7 小时前
protoc-gen-c 支持 proto3 `optional` 关键字修改记录
c语言·学习
憧憬成为java架构高手的小白7 小时前
黑马八股--中间件学习之MQ(RabbitMQ)
学习·中间件
撩得Android一次心动9 小时前
Linux编程笔记4【个人用】
linux·笔记·学习
user-猴子9 小时前
让网页“活”过来 —— 用AI打造会自主学习的动态知识图谱
人工智能·学习·知识图谱
网络工程小王10 小时前
【HCIE-AI】10.pytorch模型迁移分析
人工智能·学习·华为·llama
魔城烟雨11 小时前
从零开始学习betaflight《3-硬件接口设计规范标准》
学习·设计规范
不言鹅喻13 小时前
HarmonyOS ArkTS 实战:实现一个单词背诵与英语学习应用
学习·华为·harmonyos
正经人_x14 小时前
学习日记42
学习
一只小菜鸡..14 小时前
南京大学 操作系统 (JYY) 学习笔记:导论与历史的轮回 (OS Introduction)
笔记·学习