【opencv】示例-videowriter_basic.cpp从默认摄像头视频采集和录制

server/2024/11/9 16:45:58/

887955974966f3c098cda3f805c63bf4.png

这段代码的功能是使用OpenCV从默认摄像头捕获视频流,并将这些视频流实时写入到一个名为live.avi文件中。视频流以'MJPG'编码格式被写入,帧率设置为25帧每秒。程序还会通过一个窗口实时显示摄像头捕获的画面,窗口标题为"Live"。用户可以通过任意按键终止视频捕获和写入的过程。如果在任何步骤中出现错误(如摄像头无法打开、捕获帧为空等),程序将输出相应的错误信息并退出。

/**@file videowriter_basic.cpp  // 文件名为videowriter_basic.cpp@brief A very basic sample for using VideoWriter and VideoCapture // 文件描述:使用VideoWriter和VideoCapture的非常基础示例@author PkLab.net // 作者:PkLab.net@date Aug 24, 2016 // 日期:2016年8月24日
*/#include <opencv2/core.hpp> // 包含opencv的核心库文件
#include <opencv2/videoio.hpp> // 包含处理视频输入输出的库文件
#include <opencv2/highgui.hpp> // 包含图形用户界面的库文件
#include <iostream> // 包含输入输出流的库文件
#include <stdio.h>using namespace cv; // 使用cv命名空间中的所有成员
using namespace std; // 使用std命名空间中的所有成员int main(int, char**) // 主函数入口
{Mat src; // 定义一个Mat对象存放视频帧// use default camera as video sourceVideoCapture cap(0); // 创建VideoCapture对象,使用默认摄像头作为视频源// check if we succeededif (!cap.isOpened()) { // 如果摄像头没有正常打开cerr << "ERROR! Unable to open camera\n"; // 打印错误消息return -1; // 返回-1,程序异常结束}// get one frame from camera to know frame size and typecap >> src; // 从摄像头捕获一帧视频// check if we succeededif (src.empty()) { // 如果捕获到的帧是空的cerr << "ERROR! blank frame grabbed\n"; // 打印错误消息return -1; // 返回-1,程序异常结束}bool isColor = (src.type() == CV_8UC3); // 检查捕获帧是否是彩色的//--- INITIALIZE VIDEOWRITERVideoWriter writer; // 创建VideoWriter对象用于写视频文件int codec = VideoWriter::fourcc('M', 'J', 'P', 'G');  // 选择希望使用的编解码器(必须在运行时可用)double fps = 25.0;                          // 创建视频流的帧率string filename = "./live.avi";             // 输出视频文件的名称writer.open(filename, codec, fps, src.size(), isColor); // 打开视频文件准备写入// check if we succeededif (!writer.isOpened()) { // 如果视频文件没有成功打开cerr << "Could not open the output video file for write\n"; // 打印错误消息return -1; // 返回-1,程序异常结束}//--- GRAB AND WRITE LOOPcout << "Writing videofile: " << filename << endl<< "Press any key to terminate" << endl; // 提示视频文件正在写入,并指示按任意键停止for (;;) // 无限循环{// check if we succeededif (!cap.read(src)) { // 如果没有读取到帧cerr << "ERROR! blank frame grabbed\n"; // 打印错误消息break; // 跳出循环}// encode the frame into the videofile streamwriter.write(src); // 将捕获的帧编码后写入视频文件中// show live and wait for a key with timeout long enough to show imagesimshow("Live", src); // 在窗口中显示实时视频帧if (waitKey(5) >= 0) // 等待按键,如果有按键则退出break; }// the videofile will be closed and released automatically in VideoWriter destructorreturn 0; // 程序正常结束,视频文件在VideoWriter对象析构时自动关闭和释放
}

该代码是一个非常基础的使用OpenCV库进行视频采集和录制的示例。主要功能包括从默认摄像头捕获视频帧,检查捕获是否成功,并使用MJPG编解码器以25 FPS的帧率将捕获的视频帧写入名为“live.avi”的文件中。循环体内会不断从摄像头读取帧,如果成功捕获到帧,会将其写入视频文件,并实时显示在名为"Live"的窗口中。如果在等待键盘输入时出现按键(或者5ms内),则会结束捕获循环,程序结束时会自动关闭并释放视频文件资源。


http://www.ppmy.cn/server/2017.html

相关文章

【大语言模型】基础:TF-IDF

TF-IDF (Term Frequency-Inverse Document Frequency) 是一种用于信息检索与文本挖掘的统计方法&#xff0c;用来评估一个词对于一个文件集或一个语料库中的其中一份文件的重要性。它是一种常用于文本处理和自然语言处理的权重计算技术。 原理 TF-IDF 由两部分组成&#xff1…

gateway基本配置详解与深入分析

Spring Cloud Gateway 是基于 SpringBoot 和 Project Reactor 构建的 API 网关&#xff0c;用于提供路由、过滤和监控等功能。以下是V哥在 SpringBoot 3 项目中集成和配置 Spring Cloud Gateway 的基本步骤和深入分析&#xff0c;提供给你参考&#xff1a; 1、添加依赖 在你的…

mp3转m4a怎么转?4种方法无损转换音频~

M4A文件格式&#xff0c;或称MPEG-4 Audio&#xff0c;崭露头角于音频时代。其诞生旨在提供更高保真度和更高效的音频压缩&#xff0c;为多媒体应用和苹果设备赋能。 M4A格式与MP3格式的优缺点对比 M4A与MP4格式密不可分&#xff0c;均属于MPEG-4标准。相较MP3&#xff0c;M4A…

【机器学习算法介绍】(5)支持向量机算法

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种强大的监着学习算法&#xff0c;用于分类、回归和异常检测。SVM在处理中小型复杂数据集时特别有效&#xff0c;尤其是在类别分隔不明显的情况下。 1. 线性SVM分类 核心概念 最大间隔分类器&#xff1a;…

华为OD-C卷-最长子字符串的长度(一)[100分]

题目描述 给你一个字符串 s,首尾相连成一个环形,请你在环中找出 o 字符出现了偶数次最长子字符串的长度。 输入描述 输入是一个小写字母组成的字符串 输出描述 输出是一个整数 备注 1 ≤ s.length ≤ 500000s 只包含小写英文字母用例1 输入 alolobo输出 6说明 最长子字…

【好书推荐6】《Excel函数与公式应用大全for Excel 365 Excel 2021》

【好书推荐6】《Excel函数与公式应用大全for Excel 365 & Excel 2021》 写在最前面《Excel函数与公式应用大全for Excel 365 & Excel 2021》关键点内容简介作者简介前言/序言目录 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&…

MySQL 04-EMOJI 表情与 UTF8MB4 的故事

拓展阅读 MySQL View MySQL truncate table 与 delete 清空表的区别和坑 MySQL Ruler mysql 日常开发规范 MySQL datetime timestamp 以及如何自动更新&#xff0c;如何实现范围查询 MySQL 06 mysql 如何实现类似 oracle 的 merge into MySQL 05 MySQL入门教程&#xff0…

第十五届蓝桥杯大赛软件赛省赛(Java 大学B组)

蓝桥杯 2024年省赛真题 Java 大学B组 试题 A: 报数游戏试题 B: 类斐波那契循环数试题 C: 分布式队列 在找工作&#xff0c;随便写写&#xff0c;安定下来再把去年国赛题解补上 试题 A: 报数游戏 本题总分&#xff1a; 5 5 5 分 【问题描述】 小蓝和朋友们在玩一个报数游戏。由…