c++opencv为视频添加进度条
时间: 2023-12-31 14:06:37 浏览: 79
OpenCV带进度条的播放
要为视频添加进度条,可以使用OpenCV中的VideoCapture和VideoWriter类来读取和写入视频文件。在读取视频文件时,可以使用VideoCapture类中的get方法获取视频的总帧数和帧率,然后根据当前的帧数和帧率计算出视频的当前播放时间。然后,可以使用OpenCV中的cv::putText函数将当前播放时间绘制到视频帧上,形成进度条。最后,使用VideoWriter类将带有进度条的视频帧写入到新的视频文件中。
下面是一个简单的示例代码,用于在视频帧上添加进度条:
```c++
#include <opencv2/opencv.hpp>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
// 打开视频文件
VideoCapture cap("input_video.mp4");
if (!cap.isOpened()) {
cerr << "Error opening video file" << endl;
return -1;
}
// 获取视频信息
int totalFrames = cap.get(CAP_PROP_FRAME_COUNT);
int fps = cap.get(CAP_PROP_FPS);
// 创建输出视频文件
string outputFilename = "output_video.mp4";
VideoWriter writer(outputFilename, VideoWriter::fourcc('M', 'P', '4', 'V'), fps, Size(cap.get(CAP_PROP_FRAME_WIDTH), cap.get(CAP_PROP_FRAME_HEIGHT)));
// 定义文本属性
int fontFace = FONT_HERSHEY_SIMPLEX;
double fontScale = 1;
Scalar fontColor(0, 255, 0);
int thickness = 2;
// 读取视频帧并添加进度条
Mat frame;
int currentFrame = 0;
while (cap.read(frame)) {
// 计算当前时间
double currentTime = (double)currentFrame / fps;
// 绘制进度条
string timeString = to_string(currentTime);
putText(frame, timeString, Point(50, 50), fontFace, fontScale, fontColor, thickness);
// 写入视频帧
writer.write(frame);
// 更新当前帧数
currentFrame++;
}
// 释放资源
cap.release();
writer.release();
return 0;
}
```
这个示例代码中,我们首先打开输入视频文件,然后获取视频的总帧数和帧率。接着,我们创建一个输出视频文件,并使用while循环读取视频帧。在每一帧中,我们计算当前播放时间并将其绘制为进度条,然后将带有进度条的视频帧写入到输出视频文件中。最后,我们释放资源并结束程序。
阅读全文