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

python打开相机,用鼠标左键框选矩形区域,支持一次框选多个矩形区域,通过鼠标右标清除上一次画的矩形。

方案一

import cv2# Global variables
rectangles = []
current_rectangle = []
drawing = False# Mouse callback function
def mouse_callback(event, x, y, flags, param):global rectangles, current_rectangle, drawingif event == cv2.EVENT_LBUTTONDOWN:drawing = Truecurrent_rectangle = [(x, y)]elif event == cv2.EVENT_LBUTTONUP:drawing = Falsecurrent_rectangle.append((x, y))rectangles.append(tuple(current_rectangle))current_rectangle = []elif event == cv2.EVENT_RBUTTONDOWN:rectangles.pop()# Open camera
cap = cv2.VideoCapture(0)# Create a window and set mouse callback
cv2.namedWindow('Camera')
cv2.setMouseCallback('Camera', mouse_callback)while True:# Read frame from cameraret, frame = cap.read()# Draw rectangles on the framefor rect in rectangles:cv2.rectangle(frame, rect[0], rect[1], (0, 255, 0), 2)# Display the framecv2.imshow('Camera', frame)# Check for key presskey = cv2.waitKey(1)if key == 27:  # Press 'Esc' to exitbreak# Release the camera and destroy all windows
cap.release()
cv2.destroyAllWindows()

方案二

import cv2# Global variables
rectangles = []
current_rectangle = []
drawing = False
rect_x = 0
rect_y = 0# Mouse callback function
def mouse_callback(event, x, y, flags, param):global rectangles, current_rectangle, drawingif event == cv2.EVENT_LBUTTONDOWN:drawing = Truecurrent_rectangle = [(x, y)]global rect_x, rect_yrect_x = xrect_y = yelif event == cv2.EVENT_LBUTTONUP:drawing = Falsecurrent_rectangle.append((x, y))rectangles.append(tuple(current_rectangle))current_rectangle = []elif event == cv2.EVENT_RBUTTONDOWN:rectangles.pop()# Open camera
cap = cv2.VideoCapture(0)# Create a window and set mouse callback
cv2.namedWindow('Camera')
cv2.setMouseCallback('Camera', mouse_callback)while True:# Read frame from cameraret, frame = cap.read()# Draw rectangles on the framefor rect in rectangles:cv2.rectangle(frame, rect[0], rect[1], (0, 255, 0), 2)# Draw current rectangle in real-timeif drawing:cv2.rectangle(frame, current_rectangle[0], (rect_x, rect_y), (0, 255, 0), 2)# Display the framecv2.imshow('Camera', frame)# Check for key presskey = cv2.waitKey(1)if key == 27:  # Press 'Esc' to exitbreak# Release the camera and destroy all windows
cap.release()
cv2.destroyAllWindows()

下一步修改优化

a 在图像区域内实时显示鼠标所在位置的十字线

b 实时显示绘制框的过程

http://www.lryc.cn/news/255809.html

相关文章:

  • 卷积之后通道数为什么变了
  • ubuntu18.04安装opencv-4.5.5+opencv_contrib-4.5.5
  • 实验3.5 路由器的单臂路由配置
  • nodejs微信小程序+python+PHP的基于大数据的家电销售分析系统设计与实现-计算机毕业设计推荐django
  • Windows server flask
  • maven工程的pom.xml文件中增加了依赖,但偶尔没有下载到本地仓库
  • Navicat 技术指引 | 适用于 GaussDB 分布式的用户/权限功能
  • 基于支持向量机SVM的新鲜度等级预测,基于自适应粒子群优化长短期神经网络的新鲜度等级预测
  • 麒麟系统系统添加路由
  • 考研真题数据结构
  • python爬取 HTTP_2 网站超时问题的解决方案
  • 学会用bash在linux写脚本 (二)
  • QML中Dialog获取close与open状态
  • 用C语言实现队列的顺序结构
  • Vue 子路由页面发消息给主路由页面 ,实现主页面显示子页面的信息
  • AR技术详解
  • h5或uniapp或微信小程序,实现左上角返回到指定页面,侧滑左滑返回指定页面,安卓物理返回键返沪指定页面解决思路的思考
  • 轻量封装WebGPU渲染系统示例<43>- PBR材质与阴影实(源码)
  • macOS Big Sur/Mac电脑安装vscode显示您没有权限来打开应用程序‘Visual Studio Code‘ 请联系您的电脑或网络管理员问题修复
  • jsp 如何批量改随机人名
  • android项目实战之编辑器集成
  • JAVA程序如何打jar和war问题解决
  • Microsoft 365 Copilot正式上线,如何稳定访问体验?
  • 【安卓】安卓xTS之Media模块 学习笔记(3) VTS测试
  • Go实现http同步文件操作 - 增删改查
  • Spring Boot整合 Spring Security
  • 浅谈低代码
  • Innodb-ruby深入探索Innodb存储结构
  • Echarts的使用 笔记
  • 信息系统工程的基本概念