Win10系统C++调用OpenCV实现网络摄像头录像和抓拍图片

news/2024/5/19 10:01:47/文章来源:https://blog.csdn.net/chexlong/article/details/126976443

1 前言

前边文章介绍了在WIN10系统上,分别用C++和Python调用OpenCV接口,播放本地和网络摄像头视频。本篇我们来看一下,用C++如何调用OpenCV接口,打开网络摄像头的视频,对其进行录像,并抓拍图片。

视频来源

视频格式/协议

参数

网络摄像头

RTSP

rtsp://admin:123456@192.168.1.104:554/Streaming/Channels/101

下边我们用海康IP摄像机做测试,表格中的rtsp地址,是海康摄像机的URL格式,其它品牌(大华、宇视)与之类似。

rtsp://admin:123456@192.168.1.104:554/Streaming/Channels/101

rtsp:表示采用RTSP协议从摄像机取流

admin:摄像机网页登录用户名

123456:摄像机网页登录密码

192.168.1.104:摄像机IP地址

554:RTSP默认端口

输出文件

格式

文件名称

录像文件

mp4

output.mp4

抓拍图片文件

bmp

picture_x.bmp

2 关键接口说明

在测试程序中,主要用到了OpenCV以下接口:

录制视频

VideoWriter写视频文件类,录制视频文件时使用。

测试程序中,用到该类的重载构造函数,原型如下:

CV_WRAP VideoWriter(const String& filename, int fourcc, double fps,Size frameSize, bool isColor = true);

参数说明:

filename:保存的录像文件路径及名字

fourcc指定视频编码器,特别注意,在OpenCV3种,该参数调用方式如CV_FOURCC('M','P','4','2')。在OpenCV4中,该参数调用方式做了改变,具体见后边代码。要不然编译不过

fps:保存的录像视频帧率

frameSize录像文件视频分辨率大小,即视频画面的宽和高

isColor表示录像用彩色画面还是黑白画面,默认ture,彩色画面

抓拍图片

函数原型:

CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,const std::vector<int>& params = std::vector<int>());

参数说明:

filename:保存的抓拍图片文件路径及名字

img抓拍的视频帧,其类型为Mat

params用来设置对应图片格式的参数,一般情况下这些图片格式都是经过压缩,这里就是设置这些压缩参数来控制图片的质量。该参数是一个vector<int>类型,里面分别存入paramId_1, paramValue_1, paramId_2, paramValue_2, ... 也就是说存入一对属性值。如果不设置该参数的话,则程序会自动根据所保存的图像格式采用一个默认的参数。

3 创建测试项目

创建测试项目、配置开发环境,具体可参考之前文章,这里就不多说了

Win10+OpenCV4.6.0之开发环境(VS2022)配置入门_来灵的博客-CSDN博客

这次测试项目名称video_record,VS2022种创建好的项目截图

将下列代码编辑到video_record.cpp文件里

#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;//打开网络摄像头录像
bool OpenCameraAndRecord(const std::string& url)
{cout << "将要播放视频文件,按下空格键结束播放" << endl;VideoCapture capture;bool result = capture.open(url);//检查是否成功打开if (!capture.isOpened()){cout << "打开文摄像头失败,url:" << url << endl;return result;}//打印视频参数:宽、高、每秒传输帧数int videoWidth = capture.get(CAP_PROP_FRAME_WIDTH);int videoHeight = capture.get(CAP_PROP_FRAME_HEIGHT);int videoFps = capture.get(CAP_PROP_FPS);cout << "视频分辨率为:" << videoWidth << "x" << videoHeight << ",fps:" << videoFps << endl;//下边是OpenCV3中的调用方式,OpenCV4对第二个参数接口做了调整//VideoWriter vedio("./record/output.mp4", CV_FOURCC('M', 'J', 'P', 'G'), videoFps, Size(videoWidth, videoHeight));VideoWriter recorder("./record/output.mp4", CAP_OPENCV_MJPEG, videoFps, Size(videoWidth, videoHeight), true);try{Mat frame;char pictureName[256] = { 0 };int pictureIndex = 1;while (true){capture >> frame;						//读取视频帧if (true == frame.empty()){cout << "获取视频帧为空,退出播放" << endl;break;}//如果仅在后台录制视频,不实施播放,把imshow注释掉imshow("摄像机实时视频", frame);		//在名称为“视频文件”的窗口中显示视频recorder << frame;						//给录像文件写入视频帧int key = waitKey(1);if (32 == key)							//按下空格键退出视频每帧的显示{snprintf(pictureName, sizeof(pictureName), "./picture/picture_%d.bmp", pictureIndex++);cv::imwrite(pictureName, frame);}else if (27 == key)						//按下ESC键退出视频播放和录制{cout << "按下空格键,退出播放和录制" << endl;break;}else {}}}catch (const std::exception& e){cout << "exception:" << e.what() << endl;}capture.release();recorder.release();//如果仅在后台录制视频,不实施播放,把destroyWindow注释掉destroyWindow("摄像机实时视频");cout << "视频录制完成" << endl << endl;return result;
}int main()
{cout << "使用OpenCV录制视频测试" << endl;//打开网络摄像头播放//如果要打开电脑本地视频文件进行录制,下边参数传入视频文件路径和名字即可OpenCameraAndRecord("rtsp://admin:123456@192.168.1.104:554/Streaming/Channels/101");cout << "完成测试" << endl;system("pause");
}

 测试项目工程当前目录,新创建2个文件夹:recordpicture,分别用于保存录像文件和抓拍图片文件

VS中代码截图

 4 效果截图

 录像文件

使用VLC打开播放

抓拍图片

打开图片

 5 参考资料

 OpenCV图片拍照及视频录制方法_top_geek_001的博客-CSDN博客_opencv 拍照

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

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

相关文章

公众号网课答案查题系统-全网都在使用

公众号网课答案查题系统-全网都在使用 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击…

深度强化学习-DQN算法

论文地址&#xff1a;https://arxiv.org/abs/1312.5602 先讲下在线&#xff0c;离线&#xff0c;同策略和异策略 同策略&#xff08;on-policy&#xff09;和异策略&#xff08;off-policy&#xff09;的根本区别在于生成样本的策略和参数更新时的策略是否相同。 对于同策略&am…

产品性能测试入门秘籍

前言 在《一体化测试指标可视工程实践》中&#xff0c;我们分享了以趣链BaaS系统为例的测试实践路径&#xff0c;在后台收到读者们关于性能测试的留言。为此&#xff0c;本期将围绕如何进行产品性能测试这一话题&#xff0c;展开详细描述。 众所周知&#xff0c;一个优秀的系统…

Cobalt Strike(八)权限提升

1.BypassUAC UAC 是微软在 Windows Vista 以后版本引入的一种安全机制&#xff0c;通过 UAC&#xff0c;应用程序和任务可始终在非管理员帐户的安全上下文中运行&#xff0c;除非管理员特别授予管理员级别的系统访问权限。UAC 可以阻止未经授权的应用程序自动进行安装&#xf…

【最新计算机毕业设计】Java springboot大学生体质测评系统

基于SpringBoot的大学生体质测评系统 提供最新的计算机毕业设计源代码及帮助指导&#xff0c;公众号&#xff1a;一点毕设&#xff01; 大学生体质测试管理系统提供给用户一个简单方便体质测试管理信息&#xff0c;通过留言区互动更方便。本系统采用了B/S体系的结构&#xff0…

吔队列了你——写点单调队列优化DP

5_Lei:有没有变态一点的图啊单调队列优化DP(补) 前言: DP显然是OI中的一个重要且高频的考点,然而友善的出题人大多不会只考一个推转移方程,往往需要结合一些优化。 单调队列: 看这个的应该都会,不写了,扔个板子上去。 P1886 滑动窗口 /【模板】单调队列 优化DP: 显然…

行业话题 | 天天坐地铁,你知道BIM在地铁中的应用吗

近年来&#xff0c;随着经济水平的不断提高和城市化进程的加快&#xff0c;我国地铁建设规模也在不断加大&#xff0c;而地铁车站是地铁施工的难点和控制性工程&#xff0c;具有施工空间狭小&#xff0c;技术复杂等特点。 由于施工现场布置制约因素多&#xff0c;二维施工现场平…

究竟都是谁在使用?OpenMLDB 落地案例大起底

本文整理自第四范式资深架构师、OpenMLDB PMC 卢冕在第四范式技术日「高效落地的AI开源生态」分论坛的主题分享——《开源机器学习数据库 OpenMLDB&#xff1a;提供线上线下一致的生产特征平台》。内容包括&#xff1a; 感恩 OpenMLDB 贡献者OpenMLDB 发展历程OpenMLDB 架构设…

WinForms时代结束,报表控件FastReport.NET开启FastReport.Core.Skia 时代!

要创建高质量的报告并将其正确导出为不同的格式&#xff08;PDF、Word、Excel 等&#xff09;&#xff0c;必须使用图形引擎。从 .NET Framework 的最早版本开始&#xff0c;Microsoft 就将 GDI 及其包装器用作 System.Drawing 库的一部分。FastReport.NET长期以来一直使用相同…

第一篇文章 mybatis 综述

mybatis框架可以让程序员只需专注于写sql语句 框架就是半成品&#xff0c;将公共的部分固定下来&#xff0c;非公共的部分你自己开发就行 三层架构&#xff1a; 界面层Conttroller层&#xff1a;用来接收客户端的输入&#xff0c;调用业务逻辑层Service层&#xff0c;返回结果…

关于Facebook营销的十个常见问题,一次性讲清楚!

--- NO.1--- 为什么做Facebook营销&#xff1f; 作为全球最大的社交媒体&#xff0c;Facebook月活用户已达到了惊人的29亿&#xff0c;并且这个数据还在持续增长中&#xff0c;这意味着全球几乎一半人都会出现在Facebook上。很多企业对Facebook的关注点&#xff0c;也从是否做…

VMware Explore 大会发布重磅云上技术之外,VMware 有哪些前沿探索?

编辑 | 宋慧 出品 | CSDN 云计算 最近&#xff0c;VMware 举办了年度技术大会 VMware Explore&#xff0c;重磅发布了其在多云趋势下的多个技术产品组合&#xff0c;包含了云基础架构、云原生、网络与安全、远程混合办公等等。不过&#xff0c;在这些优势领域的产品之外&#…

系统架构与设计(1)- 权限系统的设计以及主流的五种权限模型

作者:码猿技术专栏来源:https://juejin.cn/post/7121977695197970463 ------------------------------------------------------------------- 这篇文章就来介绍一下权限系统的设计以及主流的五种权限模型。权限管控可以通俗的理解为权力限制,即不同的人由于拥有不同权力,他…

阿里云国际站代理商:FFmpeg 处理音视频文件的常用方法

阿里云代理商&#xff08;聚搜云&#xff09;专业服务于阿里云ECS服务器采购、阿里云Ddos采购、阿里云waf采购、对象存储OSS、阿里云企业邮箱采购、阿里云国际站代理商、阿里云国际站充值、云安全中心&#xff08;态势感知&#xff09;、阿里云高可用云数据库RDS、web应用云waf…

YOLO系列目标检测算法-Scaled-YOLOv4

YOLO系列目标检测算法目录 YOLO系列目标检测算法总结对比YOLOv1YOLOv2YOLOv3YOLOv4 Scaled-YOLOv4- 文章链接 YOLOv5- 文章链接 YOLOv6- 文章链接 YOLOv7- 文章链接 本文总结&#xff1a; 提出一种网络缩放方法&#xff0c;使得基于CSP的YOLOv4可以上下伸缩&#xff0c;以适…

2019Linux系统教程189讲-08_基于LAMP架构部署商城系统

任务需求 1、任务具体要求 使用yum(dnf)工具一键部署LAMP环境 发布电商项目上线 ① 能够实现web界面注册会员账号 ② 能够实现web界面进行后台商品及会员的管理 2、项目选型 ㈠ PHPSHE商城系统概述 PHPSHE商城系统是将商品管理、品牌管理、规格管理、折扣管理、拼团管理、…

【Electron】常用小功能实现合集

一、前言 本篇主要介绍在electron项目开发过程中&#xff0c;一些实用小功能点的实现。比如设置开机自启动、只允许打开一个应用、设置electron项目基地为中文、获取当前的系统数据等等。 二、功能点 接下来咱们就逐一来说一说这些功能点是如何实现的。 1.设置应用开机自启…

MySQL索引结构B+树

数据结构图示例网站&#xff1a;Data Structure Visualization 索引数据结构&#xff1a; 二叉树 红黑树 Hash表 B-Tree B-Tree&#xff0c;特点&#xff1a;&#xff08;每个节点都存储key和data&#xff0c;叶子节点指针为null&#xff09; 1、叶节点具有相同的深度&#x…

y140.第八章 Servless和Knative从入门到精通 -- Serving及实践(四)

5.Serving及实践 5.1 Knative Serving工作模式 Serving的工作模式,上图从一个更大的全景图上了解Serving以及它与istio进行结合的时候它们的工作逻辑,Serving有4个关键组件,最关键的组件就是kservice,kservice本身会有两个非常重要的组件组成,一个叫做configuration也就是…

linux驱动_uart

linux uart驱动基础知识下面链接这篇文章写得很完备&#xff0c;我没必要再介绍了&#xff0c;就写目前项目的代码&#xff0c;方便以后重温。 Linux的tty架构及UART驱动详解 本项目驱动文件包括&#xff1a; /kernel/drivers/sstar/serial/ms_uart.c # 主要实现文件 /kerne…