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)
相关推荐
yunhuibin15 分钟前
ffmpeg面向对象——拉流协议匹配机制探索
学习·ffmpeg
hengzhepa24 分钟前
ElasticSearch备考 -- Search across cluster
学习·elasticsearch·搜索引擎·全文检索·es
蜡笔小新星1 小时前
Python Kivy库学习路线
开发语言·网络·经验分享·python·学习
攸攸太上1 小时前
JMeter学习
java·后端·学习·jmeter·微服务
Ljubim.te2 小时前
Linux基于CentOS学习【进程状态】【进程优先级】【调度与切换】【进程挂起】【进程饥饿】
linux·学习·centos
yngsqq2 小时前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#
zengy53 小时前
Effective C++中文版学习记录(三)
数据结构·c++·学习·stl
cyt涛3 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Willliam_william3 小时前
SystemC学习(1)— SystemC安装与HelloWorld
学习
sealaugh323 小时前
aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图
笔记·学习·aws