目录
一、概述
二、函数
三、测试代码
四、测试结果
五、遇到的问题
(1)初次运行代码会报错
(2)关于cv::VideoWriter::fourcc('X','2','6','4')
六、参考
一、概述
这个函数是将连续的视频帧编码并保存到磁盘。函数的用法比较简单,但有一些问题点需要注意。
二、函数
cv::VideoWriter::VideoWriter
(
const String & filename,
int fourcc,
double fps,
Size frameSize,
bool isColor = true
)
filename | 视频的保存路径和文件名(包含文件后缀) |
fourcc | 用于压缩帧的4字符编解码器代码(参数值为0,默认编码为AVI格式,不压缩,文件会很大) |
fps | 视频帧率 |
frameSize | 视频的分辨率 |
isColor | 如果不为零,编码器将预期并编码彩色帧,否则将处理灰度帧。 |
三、测试代码
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <vector>
using namespace cv;
using namespace std;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//载入视频路径
VideoCapture capture("c:/opencv/cup.mp4");
//获取原视频的尺寸
int a = capture.get(CAP_PROP_FRAME_WIDTH);
int b = capture.get(CAP_PROP_FRAME_HEIGHT);
Size framesize(a,b);
//获取原视频的编码格式
int fourcc = capture.get(CAP_PROP_FOURCC);
qDebug()<<"编码格式:"<<fourcc;
//获取原视频的帧率
double fps = capture.get(CAP_PROP_FPS);
qDebug()<<"帧率:"<<fps;
//获取原视频的总帧数
long int count= capture.get(CAP_PROP_FRAME_COUNT);
qDebug()<<"总帧数:"<<count;
//自定义编码格式
int fourcc2 = cv::VideoWriter::fourcc('X','2','6','4');
qDebug()<<"自定义编码格式:"<<fourcc2;
//实例视频保存对象
VideoWriter videoWriter("c:/opencv/cup2.mp4",fourcc,fps,framesize,true);
//新建矩阵
Mat frame;
//循环
while (1)
{
//读取当前帧(再次读取时,Mat自动释放,获取下一帧图像)
capture>>frame;
//播放完毕,跳出循环
if(frame.empty())
{
qDebug()<<"播放完毕!";
break;
}
//图像显示
imshow("frame",frame);
//保存图像
videoWriter<<frame;
//延时50毫秒,读取下一帧视频(延时越小,速度越快;反之,越慢)
waitKey(25);
}
}
Widget::~Widget()
{
delete ui;
}
四、测试结果
五、遇到的问题
(1)初次运行代码会报错
提示缺少 openh264-1.8.0-win64.dll
下载地址:
https://github.com/cisco/openh264/releases
下载解压后,将 openh264-1.8.0-win64.dll 复制到 bin 目录即可。
(2)关于cv::VideoWriter::fourcc('X','2','6','4')
下载 openh264-1.8.0-win64.dll 后,不再其实缺少文件。
但用 cv::VideoWriter::fourcc(char c1,char c2,char c3,char c4) 设定参数,无论设定值是X264,还是MJPG,都会报错。但可以保存文件,并且文件可以正常播放。
测试代码中引用的mp4视频,拷贝于opencv的官方文档,获取其编码格式,进行编码,没有报错提示。其编码格式到底是哪一个,不得而知。
通过运行测试代码,可以看到
X264 对应的实际值是 875967064 ,而获取的原视频的编码格式对应数值为 828601953 。
查看官方文档,也是只列举了编码参数对应的编码格式,实在太多,没有继续深究。
下面是官方文档的转载。
Video Codecs by FOURCC
Video Codecs by FOURCC 视频格式编码
六、参考
Opencv C++:使用VideoWriter 写视频
opencv中videowriter的使用文章来源:https://www.toymoban.com/news/detail-647147.html
Opencv中VideoWriter详解文章来源地址https://www.toymoban.com/news/detail-647147.html
到了这里,关于Qt-OpenCV学习笔记--保存视频--VideoWriter()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!