1.步骤

本文采取的方式为,

  • 先利用VideoCapture创建视频捕获对象
  • 再使用其方法read获取帧

1.读取视频/相机

当我们要读取一个视频文件,或者相机时,一般有3种方式

  • 从文件中读取视频

视频捕获对象创建以后,OpenCV将会打开文件并做好准备读取它。
如果打开成功,我们将可以开始读取视频的帧,并且cv::VideoCapture的成员函数isOpened()将会返回true。
(建议在打开视频或摄像头时都使用该成员函数判断是否打开成功)

VideoCapture capture(const string& filename);  // 从视频文件读取
VideoCapture capture("D:/WorkSpace/Opencv/videos/mouse.mp4");  // 从视频文件读取
  • 从摄像机中读取视频

这种情况下,我们会给出一个标识符,用于表示我们想要访问的摄像机,及其与操作系统的握手方式。
对于摄像机而言,这个标志符就是一个标志数字

如果只有1个摄像机,那么就是0
如果系统中有多个摄像机,那么只要将其向上增加即可。

VideoCapture capture(0);  //从摄像机读取

(少用)

先创建一个视频捕获对象,然后通过成员函数open来设定打开的信息。

VideoCapture capture;
VideoCapture.open("D:/WorkSpace/Opencv/videos/mouse.mp4");  

2.读取视频捕获对象的视频帧

将视频帧读取到Mat矩阵中,一般有两种方式:

一种是read()操作
另一种是 “>>”操作。
Mat frame;
cap.read(frame); //读取方式一
cap >> frame; //读取方式二  相当于输入流,cap流入frame中

相关API

read抓取,解码并返回下一个视频帧共1个参数第1个参数 视频帧的输出图像

注:

这里简要说一下摄像头,本文只实现了对1个摄像头的读取

如果果只有1个摄像机,那么就是0,如果系统中有多个摄像机,那么只要将其向上增加即可

不过我们要注意一点:

虽然摄像机将在 VideoCapture 析构函数中自动取消初始化,但我们最好在末尾写上release,
相机是关键资源,要确保被释放
当然,视频文件更要在末尾写上release

2.示例代码

调试时注意俩点,一个是释放摄像头要退出循环以后,

一个是外部大循环了,按键就不用循环了

我们先来试一下摄像头

//函数定义
void video_demo(Mat& image);//函数实现
void QuickDemo::video_demo(Mat& image) {VideoCapture cap(0);//0表示,对摄像头进行捕获;Mat frame;while (true) {cap.read(frame);//frame为输出,read是将捕获到的视频一帧一帧的传入frame//对视频读取时,同图像一样会有判空操作if (frame.empty()) {break;}//因为摄像头是镜像的,所以我们要左右翻转一下flip(frame, frame, 1);/*read获得的视频帧也是图像,如果我们想进行一些操作,之前的方法也都适用,如色彩空间转换等*/imshow("frame", frame);int c = waitKey(1);//一般是1,相当于每秒1000张图片if (c == 27) {break;}}cap.release();
}

读取视频文件

void QuickDemo::video_demo(Mat& image) {VideoCapture cap("D:/WorkSpace/Opencv/videos/mouse.mp4");//读取视频文件Mat frame;while (true) {cap.read(frame);//frame为输出,read是将捕获到的视频一帧一帧的传入frame//对视频读取时,同图像一样会有判空操作if (frame.empty()) {break;}/*read获得的视频帧也是图像,如果我们想进行一些操作,之前的方法也都适用,如色彩空间转换等*/imshow("frame", frame);int c = waitKey(1);if (c == 27) {break;}}
}

对读取的视频帧进行操作

void QuickDemo::video_demo(Mat& image) {VideoCapture cap("D:/WorkSpace/Opencv/videos/mouse.mp4");//读取视频文件Mat frame;while (true) {cap.read(frame);//frame为输出,read是将捕获到的视频一帧一帧的传入frame//对视频读取时,同图像一样会有判空操作if (frame.empty()) {break;}colorSpace_Demo(frame);imshow("frame", frame);int c = waitKey(1);if (c == 27) {break;}}
}

C++ opencv视频文件摄像头使用相关推荐

  1. Opencv4.0学习记录(Day21 视频文件摄像头使用)

     函数:VideoCapture VideoCapture capture(0);//调用摄像头 VideoCapture capture("E:/images/01.mp4"); ...

  2. html 显示opencv视频文件夹,openmv与opencv的区别是什么?

    OpenMV是一个开源,低成本,功能强大的机器视觉模块.以STM32F427CPU为核心,集成了OV7725摄像头芯片,在小巧的硬件模块上,用C语言高效地实现了核心机器视觉算法,提供Python编程接 ...

  3. DivX/XviD -opencv 视频文件读取显示问题解决

    DivX DivX 是将影片的音频由MP3来压缩.视频由MPEG-4技术来压缩,最后再将两部分合成制作而成的.由于MP3和MPEG-4超强的压缩能力,使得影片的容量急剧减少,可以将一部2G大小的DVD ...

  4. 【opencv】VideoCapture打不开本地视频文件或者网络IP摄像头

    1.前提:成功打开本地USB摄像头 // 创建VideoCapture对象 VideoCapture vc = new VideoCapture(); // 可以成功打开本地USB摄像头 // 参数可 ...

  5. OpenCV重复播放摄像头视频,循环播放摄像头(视频)文件,循环播放视频中某一段视频

    OpenCV中使用摄像头录像并保存并不难实现,本文针对摄像头实时帧画面进行记录,并重复播放 视频文件的读取和处理方法类似,首先,本文对摄像头进行采集和实时帧画面显示. #include <ope ...

  6. OpenCV VideoCapture使用方法(视频文件、摄像头、网络视频文件)

    一.视频读取 cv::VideoCapture既支持视频文件的读取,也支持从摄像机中视频的读取.cv::VideoCapture对象的创建方式有以下三种: 方式一:     cv::VideoCapt ...

  7. 利用Python+opencv进行视频文件的读取和保存,打开笔记本摄像头拍照保存、图像在窗口显示等操作

    版权声明:本文为博主原创文章,转载请附源链接 一.视频文件的读取和保存 Opencv中视频的读入是用VideoCapture函数,保存用的是VideoWriter函数.这两个函数支持的视频格式因电脑系 ...

  8. hutool 读取扩展名文件_Python OpenCV视觉智能感知第一讲——读取摄像头或视频文件并播放显示...

    Python OpenCV视觉智能感知 第一讲--读取摄像头或视频文件并播放显示 本部分内容将深入.全面.详细地介绍如何使用Anaconda Python和OpenCV读取摄像头或视频文件,并进行播放 ...

  9. Win10系统,用C++调用OpenCV接口,播放本地视频文件,播放本地和网络摄像头

    1 前言 前边2篇文章介绍了在WIN10系统上,分别用C++和Python调用OpenCV接口,加载和显示一张静态图片.本篇我们来看一下,用C++如何调用OpenCV接口,打开和播放本地视频文件,打开 ...

最新文章

  1. 详解JavaScript之神奇的Object.defineProperty
  2. Java生成随机数的几种高级用法
  3. Codeforces Round #201 (Div. 2)C,E
  4. java嵌入式开发neo4j_java-嵌入式Neo4j实际如何工作?
  5. C++提高部分_C++函数模板_注意事项---C++语言工作笔记082
  6. poj 3414 Pots-bfs
  7. java 上传断点续传_JAVA大文件上传断点续传解决方案
  8. 大数据可视化的重要性体现在哪里
  9. css连续选取几个li_CSS高级选择器:nth-child()应用大全
  10. 2017.11.21 课程随记
  11. 上海始终未出现真正“富人区”
  12. 浅学 --------- CSS
  13. C++类的常数据成员和常成员函数
  14. 技巧篇 之 Just do it (这将会是一个漫长的历程。。。)
  15. 干货!APP推广全周期解决方案 只需做好这6步
  16. 如何使用docker和docker-compose在本地Testnet上开发EOS区块链
  17. php 微信接口文档例子,微信开发之群发(示例代码)
  18. CSS圆角 border-radius椭圆 / 正斜杠是什么?
  19. 关于github page 建立博客访问404
  20. 数据库基础知识介绍(一)

热门文章

  1. 【每日新闻】彭震:产业互联网将是浪潮服务器的下一个风口;Gartner:只有65%的企业组织有网络安全专家...
  2. CubeMX STM32 常用函数HAL库
  3. 计算机考研408每日一题 day135
  4. 经典查询练手第二篇(不懂装懂,永世饭桶!)
  5. 对皮肤美白算法的一些研究
  6. 计算机网络第二章--物理层
  7. Kibana常用查询
  8. 三个线程依次顺序执行
  9. 2023教你轻松解决blender使用常见问题
  10. uni-app项目的收获及心得体会