OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
samples/cpp/videowriter_basic.cpp

使用 VideoCapture 和 VideoWriter 类的示例

#include <opencv2/core.hpp>
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;
int main(int, char**)
{
Mat src;
// 使用默认摄像头作为视频源
VideoCapture cap(0);
// 检查是否成功打开
if (!cap.isOpened()) {
cerr << "ERROR! 无法打开摄像头\n";
return -1;
}
// 从摄像头获取一帧,以了解帧大小和类型
cap >> src;
// 检查是否成功打开
if (src.empty()) {
cerr << "ERROR! 获取到空白帧\n";
return -1;
}
bool isColor = (src.type() == CV_8UC3);
//--- 初始化 VIDEOWRITER
VideoWriter writer;
int codec = VideoWriter::fourcc('M', 'J', 'P', 'G'); // 选择所需的编解码器(必须在运行时可用)
double fps = 25.0; // 创建的视频流的帧速率
string filename = "./live.avi"; // 输出视频文件的名称
writer.open(filename, codec, fps, src.size(), isColor);
// 检查是否成功打开
if (!writer.isOpened()) {
cerr << "无法打开输出视频文件进行写入\n";
return -1;
}
//--- 获取和写入循环
cout << "正在写入视频文件: " << filename << endl
<< "按任意键终止" << endl;
for (;;)
{
// 检查是否成功打开
if (!cap.read(src)) {
cerr << "ERROR! 获取到空白帧\n";
break;
}
// 将帧编码到视频文件流中
writer.write(src);
// 显示实时视频并等待足够长时间的按键以显示图像
imshow("Live", src);
if (waitKey(5) >= 0)
break;
}
// 视频文件将在 VideoWriter 析构函数中自动关闭和释放
return 0;
}
n 维密集数组类
定义 mat.hpp:830
MatSize size
定义 mat.hpp:2187
cv::getTickFrequency
double getTickFrequency()
int type() const
返回矩阵元素的类型。
用于从视频文件、图像序列或摄像头捕获视频的类。
Definition videoio.hpp:772
virtual bool read(OutputArray image)
抓取、解码并返回下一个视频帧。
virtual bool isOpened() const
如果视频捕获已初始化,则返回 true。
视频写入类。
定义 videoio.hpp:1071
virtual bool open(const String &filename, int fourcc, double fps, Size frameSize, bool isColor=true)
初始化或重新初始化视频写入器。
virtual void write(InputArray image)
写入下一个视频帧。
virtual bool isOpened() const
如果视频写入器已成功初始化,则返回 true。
CV_8UC3
#define CV_8UC3
int main(int argc, char *argv[])
定义 highgui_qt.cpp:3
定义 core.hpp:107
STL 命名空间。