OpenCV播放摄像头视频

OpenCV计算机视觉开发实践:基于Qt C++ - 商品搜索 - 京东

播放摄像头视频和播放视频文件类似,也是通过类VideoCapture来实现,只不过调用open的时候传入的是摄像头的索引号。如果计算机安装了一个摄像头,则open的第一个参数通常是0,比如:

VideoCapture capture;capture.open(0);

或者直接用构造函数打开摄像头:

VideoCapture capture(0);

打开成功后,就可以一帧一帧地读取并一帧一帧地播放了,其实就是在一个循环里,间隔地显示一幅一幅视频帧图片,当间隔时间短了,图片动起来了,就感觉是在看视频了。

在编程之前,我们要确保操作系统能打开摄像头并播放摄像头视频,具体步骤如下:

   把一个USB摄像头插入电脑主机。

   设置虚拟机的USB控制器。打开VMware设置对话框,在硬件列表里选中“USB控制器”,在右侧的“USB兼容性”中选择USB 3.0,如图12-4所示。

图12-4

   启动并连接USB摄像头。由于目前是在Linux虚拟机中,因此当我们在主机上插上USB摄像头后,需要先连接USB摄像头到虚拟机。启动Linux虚拟机后,依次单击VMware的菜单“虚拟机”→“可移动设备”→“Nintenda USB Camera”→“连接(断开与主机的连接)”,“连接(断开与主机的连接)”菜单上就会出现一个“√”,说明USB摄像头连接到Linux虚拟机中了。我们可以用命令查看一下:

# ll /dev/video*crw-rw---- 1 root video 81, 0 8月  31 20:56 /dev/video0crw-rw---- 1 root video 81, 1 8月  31 20:56 /dev/video1

如果显示/dev/video0,则说明摄像头已经连接到Linux虚拟机中了。现在在命令行中打开摄像头:

# cheese

此时就可以看到摄像头视频了,如图12-5所示。

​​​​​​​图12-5

系统能打开摄像头了,那么使用程序方式打开也就简单了。这里先关闭这个摄像头窗口。

【例12.3】播放摄像头视频

   新建一个控制台工程,工程名是test。

   在工程配置文件test.pro的末尾添加头文件和库文件:

INCLUDEPATH += /usr/local/include/opencv4/LIBS += -L /usr/local/lib -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_core -lopencv_videoio

注意:配置文件test.pro一定要包含库opencv_videoio,这个库提供和摄像头相关的系统函数。

   打开main.cpp,并输入如下代码:

#include <opencv2/opencv.hpp>
using namespace cv;int main() 
{VideoCapture capture(0); // 创建一个捕获对象并打开它if (!capture.isOpened()) // 判断打开一个捕获视频的设备(也就是摄像头)是否成功{puts("open failed");return -1;}Mat frame;while (capture.read(frame)) 		// 读取视频帧{imshow("video-demo", frame); 	// 显示视频帧if (waitKey(30) >= 0)			// 延时30毫秒,按下任何键就退出break; 						// 跳出循环}return 0; 							// 结束程序
}

在上述代码中,首先创建一个捕获对象并打开它,然后判断打开是否成功。如果打开成功,则通过while循环逐帧读取并用imshow显示该帧图片,在while中每隔30毫秒循环读取帧并显示,这样看起来就像视频了。用户按下任何键就退出循环结束程序。waitKey(30)表示程序每30毫秒检测一次按键。

类VideoCapture既支持视频文件的读取,也支持摄像头视频的读取。如果要打开视频文件,则输入视频文件路径名;如果要打开摄像头,则输入摄像头的ID。

   保存工程并运行,结果如图12-6所示。

​​​​​​​

图12-6

要退出程序,可以在键盘上按任何键,比如空格键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统:内存管理

目录 1、主要目标 2、核心概念和技术 2.1 物理内存与虚拟内存 2.2 内存分页机制 2.3 页面置换算法 3、监控与性能优化 3.1 查看物理内存 3.2 查看虚拟内存 3.3 性能问题 1> 内存不足&#xff08;OOM&#xff09; 2> 内存泄漏 3> 内存碎片 3.4 性能优化策…

专题四:综合练习( 找出所有子集的异或总和再求和)

以leetcode1863题为例 题目分析&#xff1a; 找到每个子集&#xff0c;然后子集中的元素异或之后全部相加 算法原理分析&#xff1a; 画决策树&#xff1a;第一层为这个子集有一个元素 第二层这个子集有两个元素 从上往下罗列&#xff0c;把所有子集都罗列出来&#xf…

【python】—conda新建python3.11的环境报错

1.报错 conda create -n py3.11 python3.11 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ Collecting package metadata: done Solving environment: failed PackagesNotFoundError: The following packages are not available from current channel…

RabbitMQ事务机制

在RabbitMQ中&#xff0c;生产者为了确保消息发送成功&#xff0c;一种是使用 confirm 确认机制&#xff0c;另一种就是使用事务机制&#xff0c;事务机制就是允许生产者在发送消息时&#xff0c;将多个消息操作作为一个原子单元进行处理&#xff0c;要么所有操作都成功执行&am…

两台笔记本电脑直接通过HDMI线连接?

两台笔记本电脑直接通过HDMI线连接通常无法实现屏幕共享或数据传输&#xff0c;因为HDMI接口设计主要用于单向音视频输出(如连接显示器或电视)。以下是详细分析和替代方案&#xff1a; 为什么HDMI直连两台电脑不适用&#xff1f; 接口功能限制&#xff1a;• 大多数笔记本电脑的…

CentOS 和 RHEL

CentOS 和 RHEL&#xff08;Red Hat Enterprise Linux&#xff09;关系非常紧密&#xff0c;简而言之&#xff1a; CentOS 最初是 RHEL 的免费、开源克隆版&#xff0c;几乎与 RHEL 二进制兼容。 CentOS 原是 RHEL 的“免费双胞胎”&#xff0c;但已被放弃&#xff0c;现在推荐…

使用光标测量,使用 TDR 测量 pH 和 fF

时域反射计 &#xff08;TDR&#xff09; 是一种通常用于测量印刷电路板 &#xff08;PCB&#xff09; 测试试样和电缆阻抗的仪器。TDR 对于测量过孔和元件焊盘的电感和电容、探针尖端电容和电感&#xff0c;甚至寄生电感收发器耦合电容器也非常有用。这也是验证仿真或提取您自…

9.9 Ollama私有化部署Mistral 7B全指南:命令行交互到API集成全流程解析

Ollama私有化部署Mistral 7B全指南:命令行交互到API集成全流程解析 关键词:Ollama 私有化部署, Mistral 7B 运行, 本地大模型管理, 命令行交互, REST API 集成 一、Mistral 7B 模型特性解析 Mistral 7B 是由 Mistral AI 团队开发的高性能开源大语言模型,在同等参数量级模型…

vscode与keil的乱码不兼容问题

都用英文注释 中文注释的话&#xff0c;打开vscode的自动识别格式,如下 解决VSCode中文乱码 自动识别也可以设置识别优先级&#xff0c;把GB2312和UTF8排在自动识别序列前面(因为keil默认就是GB2312) 4.!!!在暂存更改的时候&#xff0c;不要把vscode的设置给暂存了&#xff…

大模型中的KV Cache

1. KV Cache的定义与核心原理 KV Cache&#xff08;Key-Value Cache&#xff09;是一种在Transformer架构的大模型推理阶段使用的优化技术&#xff0c;通过缓存自注意力机制中的键&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;矩阵&#xff0c;避免重复计算&…

Maven 公司内部私服中央仓库搭建 局域网仓库 资源共享 依赖包构建共享

介绍 公司内部私服搭建通常是为了更好地管理公司内部的依赖包和构建过程&#xff0c;避免直接使用外部 Maven 中央仓库。通过搭建私服&#xff0c;团队能够控制依赖的版本、提高构建速度并增强安全性。公司开发的一些公共工具库更换的提供给内部使用。 私服是一种特殊的远程仓…

文档外发安全:企业数据防护的最后一道防线

在当今数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。随着网络安全威胁日益增多&#xff0c;企业安装专业加密软件已从"可选"变为"必选"。本文将全面分析企业部署华途加密解决方案后获得的各项战略优势。 一、数据安全防护升级 核心数据全面保护…

【ArcGIS】根据shp范围生成系列等距点:范围外等距点+渔网点(Python全代码)

【ArcGIS】根据shp范围生成系列等距点 目标1&#xff1a;生成边界外一定范围、并且等间距分布的点&#x1f4c1; 所需数据&#xff1a;操作步骤-ArcGIS代码处理-Python 目标2&#xff1a;生成等距渔网点&#x1f4c1; 所需数据&#xff1a;代码处理-Python 参考 目标1&#xff…

Docker 环境安装(2025最新版)

Docker在主流的操作系统和云平台上都可以使用&#xff0c;包括Linux操作 系统&#xff08;如Ubuntu、 Debian、Rocky、Redhat等&#xff09;、MacOS操作系统和 Windows操作系统&#xff0c;以及AWS等云平 台。 Docker官网&#xff1a; https://docs.docker.com/ 配置宿主机网…

Java并发编程-线程池(二)

文章目录 线程池的实现原理execute(Runnable command)**1. 阶段一&#xff1a;尝试创建核心线程****2. 阶段二&#xff1a;尝试将任务加入队列****3. 阶段三&#xff1a;尝试创建非核心线程或拒绝任务****关键机制与设计思想** 线程池的实现原理 当向线程池提交一个任务之后&a…

清华大学开源软件镜像站地址

清华大学开源软件镜像站&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/

脑机接口技术:开启人类与机器融合的新时代

摘要 脑机接口&#xff08;BCI&#xff09;技术作为一项前沿科技&#xff0c;正在逐步打破人类与机器之间的沟通障碍&#xff0c;为医疗、娱乐、教育等多个领域带来前所未有的变革。本文将详细介绍脑机接口技术的基本原理、发展现状、应用场景以及面临的挑战和未来发展趋势&…

2025前端面试遇到的问题(vue+uniapp+js+css)

Vue相关面试题 vue2和vue3的区别 一、核心架构差异 特性Vue2Vue3响应式系统基于Object.defineProperty基于Proxy&#xff08;支持动态新增/删除属性&#xff09;代码组织方式Options API&#xff08;data/methods分块&#xff09;Composition API&#xff08;逻辑按功能聚合&am…

Matlab基于SSA-MVMD麻雀算法优化多元变分模态分解

Matlab基于SSA-MVMD麻雀算法优化多元变分模态分解 目录 Matlab基于SSA-MVMD麻雀算法优化多元变分模态分解效果一览基本介绍程序设计参考资料效果一览 基本介绍 Matlab基于SSA-MVMD麻雀算法优化多元变分模态分解 可直接运行 分解效果好 适合作为创新点(Matlab完整源码和数据),…

Gatsby知识框架

一、Gatsby 基础概念 1. 核心特性 基于React的静态站点生成器&#xff1a;使用React构建&#xff0c;输出静态HTML/CSS/JS GraphQL数据层&#xff1a;统一的数据查询接口 丰富的插件系统&#xff1a;超过2000个官方和社区插件 高性能优化&#xff1a;自动代码分割、预加载、…