【OpenCV学习】阶段小练习——绘画板

🌈据说,看我文章时 关注、点赞、收藏帅哥美女们 心情都会不自觉的好起来。

前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:OpenCV从入门到放弃 ,一个学习OpenCV的专栏~

专栏文章直链:
【OpenCV学习】绘制图形其二
【OpenCV学习】绘制图形其一
【OpenCV学习】Mat数据结构与图像通道的分割与融合
【OpenCV学习】OpenCV的色彩空间
【OpenCV学习】初识OpenCV其二
【OpenCV学习】初识OpenCV人生苦短,我用python

阶段小练习——绘画板

需求

需要一个绘画板,要求如下:

键盘操作鼠标操作效果
q-退出程序
l-切换绘画方式为画直线
r-切换绘画方式为画矩形
c-切换绘画方式为画圆
-左键按下设置为起始点
-左键抬起设置为终点(圆为半径)

效果图

在这里插入图片描述

分析

经过之前的学习,我们知道 cv2.waitKey(1) 可以返回按下的按键的ASCII码,所以这四个键盘操作可以通过这个函数获取到,放在主函数循环中,就能切换绘画方式了;
然后鼠标回调函数 mouse_callback(event, x, y, flags, userdata) 中的 event 获取到事件,来判断我们的鼠标是左键按下还是左键抬起。

参考代码

import numpy as np
from cv2 import cv2

start_pos = (0, 0)
action = 0  # 0为画直线,1为画矩形,2为画圆
cv2.namedWindow('draw')
img = np.full((400, 400, 3), 0, np.uint8)
cv2.imshow('draw', img)


def mouse_callback(event, x, y, flags, userdata):
    global start_pos
    if event == cv2.EVENT_LBUTTONDOWN:
        start_pos = (x, y)
    elif event == cv2.EVENT_LBUTTONUP:
        if action == 0:
            cv2.line(img, start_pos, (x, y), (0, 0, 255), 3)
        elif action == 1:
            cv2.rectangle(img, start_pos, (x, y), (0, 0, 255), 3)
        elif action == 2:
            cv2.circle(img, start_pos, int(((start_pos[0] - x) ** 2 + (start_pos[1] - y) ** 2) ** 0.5), (0, 0, 255), 3)
    cv2.imshow('draw', img)


cv2.setMouseCallback('draw', mouse_callback)
while 1:
    key = cv2.waitKey(1)
    if key == ord('q'):
        break
    elif key == ord('l'):
        action = 0
    elif key == ord('r'):
        action = 1
    elif key == ord('c'):
        action = 2
cv2.destroyAllWindows()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值