当前位置: 首页 > news >正文

OpenCV - 实现鼠标在界面上绘制一些基本图形

import numpy as np
import cv2# 实现的功能
##########################
# 1. 画线:当用户按下l键,即选择了画线,此时,滑动鼠标可以画线。
# 2. 画矩形:当用户按下r键,即选择了画矩形,此时,滑动鼠标可以画矩形。
# 3. 画圆:当用户按下c键,即选择了画圆,此时,滑动鼠标可以画圆。
# ...
########################### 显示窗口  背景
img = np.zeros((480, 640, 3), np.uint8)# curshape:0代表画线,1代表画矩形,2代表画圆
curshape = 0
startpos = (0, 0)# 回调函数
def mouse_callback_func(event, x, y, flags, user_data):# event表示事件,x,y表示鼠标的当前位置坐标# 当按下鼠标左键时,记录绘图的初始位置# 当抬起鼠标左键时,当前x y的坐标为绘图的结束为止# 申明使用全局变量global startpos, curshape# 如果按下鼠标左键,则记录鼠标的位置坐标:startposif event & cv2.EVENT_LBUTTONDOWN == cv2.EVENT_LBUTTONDOWN:startpos = (x, y)# 抬起鼠标时,绘图,elif event & cv2.EVENT_LBUTTONUP == cv2.EVENT_LBUTTONUP:# 需要先判断按下的是那个键: l / r / c# curshape == 0 表示绘制直线if curshape == 0:cv2.line(img, startpos, (x, y), (0,0,255))# curshape == 1 表示绘制矩形elif curshape == 1:cv2.rectangle(img, startpos, (x, y), (0,0,255))# curshape == 2 表示绘制圆形elif curshape == 2:# 计算圆的半径 ra = x - startpos[0]b = y - startpos[1]r = int((a**2 + b**2)**0.5)cv2.circle(img, startpos, r, (0,0,255))else:print('Error: no shape')# 创建窗口
cv2.namedWindow('drawShape', cv2.WINDOW_NORMAL)# 设置鼠标回调
cv2.setMouseCallback('drawShape', mouse_callback_func, '123')while True:cv2.imshow('drawShape', img)key = cv2.waitKey(1) & 0xFFif key == ord('q'):breakelif key == ord('l'):curshape = 0elif key == ord('r'):curshape = 1elif key == ord('c'):curshape = 2cv2.destroyAllWindows()

 

http://www.jsqmd.com/news/686823/

相关文章:

  • 3步精通中兴光猫配置解密:高效网络设备管理解决方案
  • 如何彻底告别网盘限速:LinkSwift八大平台直链下载助手终极指南
  • 2026年3月汽车内饰扫描仪品牌推荐,汽车内饰扫描仪/抄板机/不锈钢扫描仪/智能扫描系统,汽车内饰扫描仪厂家口碑推荐 - 品牌推荐师
  • 【BugkuCTF】Whois
  • STM32L431RCT6串口DMA收发实战:从CubeMX配置到IDLE中断处理,一个完整项目带你跑通
  • 2026年3月评价高的304法兰工厂推荐,304法兰/不锈钢美标法兰/不锈钢法兰/不锈钢锻件法兰,304法兰实地厂家推荐 - 品牌推荐师
  • 分布式锁应用场景
  • 深入浅出:用Keil C51的Memory Mode优化你的51单片机内存布局
  • 入门必刷4题:算法面试轻松拿下
  • 航旅纵横APP故障18h后,各项功能才恢复正常
  • 聊聊2026年支持定制的振动式淘金设备厂家,哪家性价比高 - mypinpai
  • STM32 C8T6实战:用SPI读写W25Q64 Flash存储芯片(附完整代码与调试心得)
  • 京东抢购助手终极指南:一键实现自动化秒杀的高效方案
  • VideoDownloadHelper:3分钟掌握网页视频下载的终极解决方案
  • JVM学习第三天:JVM基础核心原理 + 面试高频题全解(精简版)
  • 利用ELIC的‘能量集中’特性,5分钟为你的图库系统实现极速缩略图预览
  • 机器学习实战:5大免费数据集入门指南
  • 第八届传智杯复赛第二场 题补bxg25-27 或许要期待明天
  • Kylin-Server-V11、openEuler-22.03和openEuler-24.03的MySQL 8.4.9版本正式发布
  • 室内空气质量监测装置厂家选购指南:避坑与筛选全攻略 - 速递信息
  • 别再只会点灯了!用STM32串口玩点高级的:OLED实时显示+双向通信实战
  • 超越中断:在国产ZYNQ的OCM里划块‘共享内存’,实现更高效的多核数据交换
  • 给DELL R730xd加装非认证PCIE固态后,风扇狂转?5分钟用IPMI命令搞定
  • 备案后别忘了这件事:手把手教你为阿里云已备案域名配置HTTPS(SSL证书)
  • AI Skills插件开发避坑指南:从环境搭建到上线
  • SchoolCMS:重构中小学校园数字化管理的开源技术架构
  • mysql添加一个用户
  • 从NRF24L01‘平替’到原生ESB:一个老项目无线模块升级的成本与性能实测
  • 结构体指针与动态数组实战指南
  • 2026年甘肃新疆等地带专用锁具的密封粮库门窗厂家推荐,靠谱品牌盘点 - mypinpai