龙空技术网

OpenCV 视频读写操作

积极的阳光i 386

前言:

此时各位老铁们对“opencv 视频播放”都比较珍视,兄弟们都想要知道一些“opencv 视频播放”的相关文章。那么小编在网摘上汇集了一些有关“opencv 视频播放””的相关文章,希望同学们能喜欢,你们快快来学习一下吧!

视频读写本质上还是读写图像,因为视频是由一帧一帧图像组成的,1秒24帧基本就能流畅地读取视频了。本文对OpenCV 视频操作做个汇总。

1.读取视频

两种读取视频文件的方法:

方法1:调用API open函数

VideoCapture cap;cap.open("x.avi");

方法2:直接读取文件

VideoCapture cap("x.avi");
1.1 显示视频每一帧
while (true) {bool ret = capture.read(frame);if (!ret) break;imshow("frame", frame);char c = waitKey(5);if (c == 27) { // ESCbreak;}}
1.2 获取视频文件的属性信息
VideoCapture cap;cap.open("E:\\2.avi"); //打开视频if(!cap.isOpened())return;int width = cap.get(CV_CAP_PROP_FRAME_WIDTH); //帧宽度int height = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //帧高度int frameRate = cap.get(CV_CAP_PROP_FPS); //帧率 x frames/sint totalFrames = cap.get(CV_CAP_PROP_FRAME_COUNT); //总帧数cout<<"视频宽度="<<width<<endl;cout<<"视频高度="<<height<<endl;cout<<"视频总帧数="<<totalFrames<<endl;cout<<"帧率="<<frameRate<<endl;

读取摄像头和读取视频大同小异,主要是这句代码有些许不同。 VideoCapture cap; cap.open(0); 读取视频时可以传入视频路径,而读取摄像头传入的是index索引号。

2.写入视频文件2.1 API

VideoWriter:OpenCV提供VideoWriter类写视频文件,类的构造函数可以指定文件名、播放帧率、帧尺寸、是否创建彩色视频。

2.2 两种读取视频文件的方法

方法1:writer.write(frame)

方法2:writer >>frame

这两种方法的frame 都是一帧图像。

2.3 注意事项

1)写入视频前需安装对应的编解码器

2)生成视频是否支持彩色应与构造函数设置一致

3)生成视频尺寸需与读取视频尺寸一致

3.示例

#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv) {VideoCapture capture;capture.open("D:/images/video/vtest.avi");// VideoCapture capture("D:/images/video/vtest.avi");if (!capture.isOpened()) {printf("could not open the camera...\n");}namedWindow("frame", WINDOW_AUTOSIZE);int fps = capture.get(CAP_PROP_FPS);int width = capture.get(CAP_PROP_FRAME_WIDTH);int height = capture.get(CAP_PROP_FRAME_HEIGHT);int num_of_frames = capture.get(CAP_PROP_FRAME_COUNT);int type = capture.get(CAP_PROP_FOURCC);printf("frame size(w=%d, h=%d), FPS:%d, frames: %d \n", width, height, fps, num_of_frames);Mat frame;VideoWriter writer("D:/test.mp4", type, fps, Size(width, height), true);while (true) {bool ret = capture.read(frame);if (!ret) break;imshow("frame", frame);writer.write(frame);char c = waitKey(5);if (c == 27) { // ESCbreak;}}capture.release();writer.release();waitKey(0);destroyAllWindows();}

标签: #opencv 视频播放