往往用OpenCV进行视频处理时需要对视频进行前期预处理,此时视频的剪切是必不可少的,经常会剪切指定帧之间的视频。话不多说,看代码:
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
//【1】读入视频
VideoCapture capture("/************/.avi"); //从文件夹中读取视频
float fps = capture.get(CV_CAP_PROP_FPS); //求帧率
long framewidth = capture.get(CV_CAP_PROP_FRAME_WIDTH); //q求帧宽
long framehight = capture.get(CV_CAP_PROP_FRAME_HEIGHT); //求帧高
cout << framehight << endl;
cout << framewidth << endl;
VideoWriter writer("/***********************/剪切后视频.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, Size(framewidth, framehight));
//保存剪切后视频到指定文件夹,注意此时视频的尺寸大小必须与上面读取的视频尺寸一致,同时最好保存avi格式的视频,方便剪切
//【2】循环显示每一帧
int i = 0;
while (1)
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame; //读取当前帧
i++;
//若视频播放完成,退出循环
if (frame.empty())
{
break;
}
{
//【1】读入视频
VideoCapture capture("/************/.avi"); //从文件夹中读取视频
float fps = capture.get(CV_CAP_PROP_FPS); //求帧率
long framewidth = capture.get(CV_CAP_PROP_FRAME_WIDTH); //q求帧宽
long framehight = capture.get(CV_CAP_PROP_FRAME_HEIGHT); //求帧高
cout << framehight << endl;
cout << framewidth << endl;
VideoWriter writer("/***********************/剪切后视频.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, Size(framewidth, framehight));
//保存剪切后视频到指定文件夹,注意此时视频的尺寸大小必须与上面读取的视频尺寸一致,同时最好保存avi格式的视频,方便剪切
//【2】循环显示每一帧
int i = 0;
while (1)
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame; //读取当前帧
i++;
//若视频播放完成,退出循环
if (frame.empty())
{
break;
}
if (i>1000&& i < 1100) //剪切帧数在1000到1100之间的
{
imshow("读取视频", frame); //显示当前帧,可以看到剪切后的视频片段
writer << frame;
waitKey(30); //延时30ms
}
}
return 0;
{
imshow("读取视频", frame); //显示当前帧,可以看到剪切后的视频片段
writer << frame;
waitKey(30); //延时30ms
}
}
return 0;