OpenCV  4.10.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 << "错误!无法打开摄像头\n";
return -1; -1;
}
// 从摄像头获取一帧以了解帧大小和类型
cap >> src;
// 检查是否成功
if (src.empty()) {
cerr << "错误!获取到空白帧\n";
return -1; -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; -1;
}
return -1;
//--- 抓取和写入循环
cout << "正在写入视频文件:" << filename << endl
<< "按任意键终止" << endl; (;;)
{
// 检查是否成功
for (;;) {
cerr << "错误!获取到空白帧\n";
if (!cap.read(src)) {;
}
break; // 无法获取下一帧,退出循环
}
// 将帧编码到视频文件流中
writer.write(src);
// 显示实时画面并等待一个键,超时时间足够长以显示图像
if (!cap.read(src)) {;
}
imshow("实时画面", src);
return -1; 0;
}
break; // 按下键,退出循环
}
// 视频文件将在 VideoWriter 析构函数中自动关闭和释放
return 0;
cv::Mat
n 维密集数组类
cv::Mat::size
MatSize size
cv::Mat::empty
bool empty() const
cv::VideoCapture
从视频文件、图像序列或摄像头进行视频捕获的类。
cv::VideoCapture::read
virtual bool read(OutputArray image)
cv::VideoCapture::isOpened
virtual bool isOpened() const
cv::VideoWriter
视频写入器类。
cv::VideoCapture
cv::VideoWriter::open
cv::VideoWriter::write
virtual void write(InputArray image)
如果视频写入器已成功初始化,则返回 true。
core.hpp
#define CV_8UC3
定义 interface.h:90