Python,OpenCV鼠标事件进行矩形、圆形的绘制(随机颜色、随机半径)

  • 1. 效果图
  • 2. 源码
  • 参考

这篇博客将介绍鼠标事件,并介绍鼠标事件矩形、圆形的绘制;

  1. 所有的鼠标事件(左键按下、左键释放、右键按下、右键释放、左键双击等);
  2. 绘制随机半径、随机颜色圆形;
  3. 绘制矩形、切换按键绘制圆形;

1. 效果图

鼠标事件,双击左键绘制圆形效果图如下:

鼠标事件,双击左键绘制随机颜色、随机半径的圆形效果图如下:

鼠标事件,双击左键绘制矩形,m键切换,双击左键绘制圆形效果图如下:

2. 源码

# Python,OpenCV鼠标事件进行矩形、圆形的绘制(随机颜色、随机半径)
# USAGE
# python mouse_as_paint_brushimport cv2
import numpy as np# 查看所有鼠标事件
events = [i for i in dir(cv2) if 'EVENT' in i]
print(events)img = Nonedrawing = False  # true if mouse is pressed
mode = True  # if True, draw rectangle. Press 'm' to toggle to curve
ix, iy = -1, -1# 定义鼠标回调函数,绘制填充的蓝色圆
def draw_circle(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDBLCLK:  # 鼠标左键双击事件cv2.circle(img, (x, y), 50, (255, 0, 0), -1)# 定义鼠标回调函数,绘制随机颜色随机半径的填充圆
def draw_random_circle(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDBLCLK:  # 鼠标左键双击事件radius = np.random.randint(1, high=50)color = np.random.randint(0, high=256, size=(3,)).tolist()# print('radius: ', radius, type(radius))# print('color: ', color, type(color))cv2.circle(img, (x, y), radius, color, -1)# 定义鼠标回调函数,绘制填充红色圆,或者绿色填充矩形
def draw_circle_rectangle(event, x, y, flags, param):global ix, iy, drawing, modeif event == cv2.EVENT_LBUTTONDOWN:drawing = Trueix, iy = x, yelif event == cv2.EVENT_MOUSEMOVE:if drawing == True:if mode == True:cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)else:cv2.circle(img, (x, y), 10, (0, 0, 255), -1)elif event == cv2.EVENT_LBUTTONUP:drawing = Falseif mode == True:cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)else:cv2.circle(img, (x, y), 10, (0, 0, 255), -1)def draw_circle_only():# 创建一个黑色背景图,并绑定鼠标回调事件global img  # 标明为全局变量img = np.zeros((512, 512, 3), np.uint8)cv2.namedWindow('draw_circle_only image')cv2.setMouseCallback('draw_circle_only image', draw_circle)while (1):cv2.imshow('draw_circle_only image', img)# 按下ESC键退出if cv2.waitKey(20) & 0xFF == 27:breakcv2.destroyAllWindows()def draw_circle_randomly():# 创建一个黑色背景图,并绑定鼠标回调事件global img  # 标明为全局变量img = np.zeros((512, 512, 3), np.uint8)cv2.namedWindow('draw_circle_randomly image')cv2.setMouseCallback('draw_circle_randomly image', draw_random_circle)while (1):cv2.imshow('draw_circle_randomly image', img)# 按下ESC键退出if cv2.waitKey(20) & 0xFF == 27:breakcv2.destroyAllWindows()# 通过拖动鼠标来绘制矩形或圆形,鼠标回调函数有两部分,一是画矩形,二是画圆。
# 这个具体的例子将非常有助于创建和理解一些交互式应用程序,如对象跟踪、图像分割等。
# 按下左键拖动鼠标绘制矩形。按m键切换绘制圆形
def draw_circle_and_rectangle():global imgimg = np.zeros((512, 512, 3), np.uint8)cv2.namedWindow('draw_circle_and_rectangle image')cv2.setMouseCallback('draw_circle_and_rectangle image', draw_circle_rectangle)while (1):cv2.imshow('draw_circle_and_rectangle image', img)k = cv2.waitKey(1) & 0xFFif k == ord('m'):global modemode = Falseelif k == 27:breakcv2.destroyAllWindows()draw_circle_only()
draw_circle_randomly()
draw_circle_and_rectangle()

参考

  • https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_mouse_handling/py_mouse_handling.html#mouse-handling

Python,OpenCV鼠标事件进行矩形、圆形的绘制(随机颜色、随机半径)相关推荐

  1. python+opencv获取最小外接矩形

    python+opencv获取最小外接矩形 环境 代码 效果 环境 python版本:3.8 opencv版本:4.3.0.36 代码 from PIL import Image from pylab ...

  2. python模拟鼠标 事件

    python模拟鼠标事件: 可以使用 pyautogui pyautogui 的安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple p ...

  3. Day 2 - Opencv 鼠标事件回调并在图像上显示像素值

    Day 2 - Opencv 鼠标事件回调并在图像上显示像素值 #include <highgui.hpp> #include <opencv.hpp> #include &l ...

  4. openCV鼠标事件实例

    1.原理 OpenCV的鼠标事件主要涉及两个函数: 回调函数cvSetMouseCallback void cvSetMouseCallback( const char* window_name, C ...

  5. OpenCV鼠标事件和滑动条事件

    鼠标事件 ① 鼠标事件是通过传统的回调函数机制来完成. void your_mouse_callback(int event, int x, int y, int flags, void* param ...

  6. opencv 鼠标事件

    import cv2 as cv events = [i for i in dir(cv) if 'EVENT' in i] print( events ) # 打印所有的鼠标事件 import nu ...

  7. C++ opencv 鼠标事件响应

    1.API setMouseCallback   设置指定窗口的鼠标处理程序 共3个参数第1个参数 窗口名称第2个参数 处理鼠标事件的回调函数第3个参数 传递给回调函数的可选参数 MouseCallb ...

  8. Python监控鼠标事件的压枪脚本

    本文仅供学习和交流使用,若使用脚本导致游戏封号或其他后果不负一切责任哈~ ------------------------------2021.7.26 更新分割线------------------ ...

  9. opencv画框返回坐标 python_python opencv鼠标事件实现画框圈定目标获取坐标信息

    本文实例为大家分享了python-opencv鼠标事件画框圈定目标的具体代码,供大家参考,具体内容如下 在视频/相机中,用鼠标画矩形框,圈定目标,从而获得鼠标的起始坐标点a.终止坐标点b # -*- ...

最新文章

  1. Linux内核模块编程系列1-极简内核模块编写
  2. HTML5学习笔记(二十七):Ajax
  3. 使用WebBrowser控件获取网页源码的方法
  4. reg怎样存取注册表信息
  5. 【LeetCode】3月28日打卡-Day13
  6. Ubicomp一些有意思的论文
  7. 收藏 | 12个神经网络可视化工具!
  8. Python学习笔记——元组
  9. Mac下python3配置Sklearn
  10. Tcl Tutorial 笔记7 ·for incr
  11. Redis为什么可以支持那么大的并发访问量?为什么redis没有单点并发瓶颈?
  12. 学生宿舍管理系统的设计与实现
  13. springboot系列(二十五):如何实现单word模板分多页导出?这你得会|超级详细,建议收藏
  14. 结婚证照片尺寸是多少?教你拍出好看的证件照照片
  15. [宅]最近3个月的宅生活
  16. 如何组建游戏制作团队?团队人员如何寻找?
  17. 【转】高级育婴师 告诉你,一定要这么做
  18. 大三第十一周学习笔记
  19. 谈谈学习 - 费曼技巧,以教促学的好方法
  20. Android通知——Notification

热门文章

  1. 在Lumen中引入钉钉SDK
  2. [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree
  3. logrus学习笔记
  4. 浙江大学数学专业考研试题参考解答
  5. Go 学习笔记(30)— Go 语言 make 和 new 的区别
  6. WebStorm中SVN配置
  7. phpstrom+xdebug调试PHP代码
  8. GHOST还原教程详细
  9. JSon数据查询---Jlinq
  10. 搜集《ASP.NET中常用的26个优化性能方法》