OpenCV(Open Source Computer Vision Library)是一个功能强大的开源计算机视觉库,它提供了丰富的功能,包括读取和保存视频。下面分别演示如何使用OpenCV来读取视频和保存视频。
1. 读取视频:
在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件:
-
创建读取视频的对象
cap = cv.VideoCapture(filepath)
参数:
filepath: 视频文件路径
要读取视频,首先需要打开视频文件,然后逐帧读取视频的每一帧。以下是一个示例代码,演示如何使用OpenCV读取视频:
//打开视频文件
VideoCapture capture;
Mat frame;
frame=capture.open(path);//path为视频文件的路径
//检查是否成功打开视频
if(!capture.isOpened()){
LOGD("无法打开视频");
}
//循环读取每一帧frame
int i=0;
while(capture.read(frame)) {
//在这里可以对每一帧frame进行处理
imwrite("/sdcard/DCIM/frame"+to_string(i)+".png",frame);//保存视频每一帧到相册
i++;
}
2. 保存视频:
在OpenCV中保存视频使用的是VedioWriter对象,在其中指定输出文件的名称,如下所示:
1.创建视频写入的对象
out = cv2.VideoWriter(filename,fourcc, fps, frameSize)
参数:
- filename:视频保存的位置
- fourcc:指定视频编解码器的4字节代码
- fps:帧率
- frameSize:帧大小
要保存视频,首先需要创建一个视频写入对象,然后逐帧将图像写入该对象。以下是一个示例代码,演示如何使用OpenCV保存视频:
//打开视频文件
VideoCapture capture;
Mat frame;
frame=capture.open(path);
if(!capture.isOpened()){
LOGD("无法打开视频");
}
//获取视频基本信息
int frame_width = static_cast<int>(capture.get(cv::CAP_PROP_FRAME_WIDTH));
int frame_height = static_cast<int>(capture.get(cv::CAP_PROP_FRAME_HEIGHT));
//定义视频编码器及其参数
double fps = capture.get(cv::CAP_PROP_FPS);
int codec=VideoWriter::fourcc('M','J','P','G');
//设置新的视频的路径和参数
VideoWriter output;
output.open("/sdcard/DCIM/framevideo4804.avi",CAP_OPENCV_MJPEG,codec,fps,cv::Size(frame_width, frame_height),true);
//判断是否创建出新的视频文件
if (!output.isOpened())
{
LOGD("无法创建输出视频文件!");
return ;
}
int i=0;
while(capture.read(frame)) {
//在这里可以对视频的每一帧frame进行处理
// 将处理后的帧写入输出到新的视频文件中
output.write(frame);
}