我是靠谱客的博主 舒服鸡翅,这篇文章主要介绍OpenCV中VideoCapture类的使用详解,现在分享给大家,希望可以做个参考。

OpenCV中从视频文件或摄像机中捕获视频的类是VideoCapture。该类提供 C++ API 用于从摄像机捕获视频或读取视频文件。

关于视频的读操作是通过VideoCapture类来完成的;视频的写操作是通过VideoWriter类来实现的。

VideoCapture既支持从视频文件读取,也支持直接从摄像机(比如计算机自带摄像头)中读取。要想获取视频需要先创建一个VideoCapture对象,VideoCapture对象的创建方式有以下三种:

一、创建一个捕获对象,通过成员函数open()来设定打开的信息

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream> #include<opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture capture; Mat frame; frame = capture.open("video.mp4"); // frame = capture.open("watershed.jpg"); if (!capture.isOpened()) { printf("can not open ...n"); return -1; } namedWindow("output", CV_WINDOW_AUTOSIZE); while (capture.read(frame)) { imshow("output", frame); waitKey(60); } capture.release(); return 0; }

二、创建一个VideoCapture对象, 从摄像机中读取视频

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<iostream> #include<opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture capture; capture.open(0); if (!capture.isOpened()) { printf("can not open ...n"); return -1; } Size size = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT)); VideoWriter writer; writer.open("D:/image/a2.avi", CV_FOURCC('M', 'J', 'P', 'G'), 10, size, true); Mat frame, gray; namedWindow("output", CV_WINDOW_AUTOSIZE); while (capture.read(frame)) { //转换为黑白图像 cvtColor(frame, gray, COLOR_BGR2GRAY); //二值化处理 // threshold(gray, gray, 0, 255, THRESH_BINARY | THRESH_OTSU); cvtColor(gray, gray, COLOR_GRAY2BGR); // imshow("output", gray); imshow("output", frame); writer.write(gray); waitKey(10); } waitKey(0); capture.release(); return 0; }

三、从文件中读取视频

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream> #include<opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture capture; Mat frame; frame = capture("D:\video.avi"); if (!capture.isOpened()) { printf("can not open ...n"); return -1; } namedWindow("output", CV_WINDOW_AUTOSIZE); while (capture.read(frame)) { imshow("output", frame); waitKey(60); } capture.release(); return 0; }

总结:

OpenCV中里面成员函数多,要想获取视频需要先创建一个VideoCapture对象,可以先实例化再初始化,或者在实例化的同时进行初始化。

最后

以上就是舒服鸡翅最近收集整理的关于OpenCV中VideoCapture类的使用详解的全部内容,更多相关OpenCV中VideoCapture类内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部