其他分享
首页 > 其他分享> > Opencv处理视频序列

Opencv处理视频序列

作者:互联网

一、什么是FOURCC

FOURCC是“four character code”的缩写,也称为4CC。用于媒体文件中的视频编解码器、压缩格式、颜色或像素格式的标识符。一个字符编码占用一个字节也就是8位的存储空间,因此一个FOURCC占用4字节。FOURCC中的四个字符通常都是用ASCII字符编码,以方便交流。

AVI文件是最广泛使用的,或者说是第一种广泛使用的媒体文件格式,它使用FOURCC标识符作为编解码器用于压缩文件中的各种视频/音频流。其他比较著名的FOURCC包括DIVX、XVID、H264、DX50。但这些只是数百个在使用的FOURCC的一小部分。

视频的大小直接影响视频分析的实时性,而视频文件的大小影响因素有时长、格式、帧率(FPS)以及分辨率等,因此需要选择合适的格式,或者做一些压缩处理。部分CV_FOURCC测试如下:
在这里插入图片描述

二、视频压缩

ffmpeg是格式转化和压缩的工具,使用命令行进行转化。参考文档 http://wiki.webmproject.org/ffmpeg。
测试如下:

ffmpeg -i test_mjpg.avi -threads 4 -vcodec libvpx-vp9 -cpu-used -8 -crf 10 -qmax 60 -deadline realtime test.webm

实测:19M压缩为1.6M

三、图片序列转视频

VideoWriter(const string& filename, int fourcc, double fps,
			Size frameSize, bool isColor=true);

各参数含义如下:

第二个参数OpenCV提供的格式是未经过压缩的,目前支持的格式如下

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(){
    Mat src=imread("/home/xxx/cam0/0.png",1);
    char image_name[100];
    int isColor = 1;
    int fps = 10;
    int frameWidth = src.cols;
    int frameHeight = src.rows;

    VideoWriter writer("test.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, Size(frameWidth, frameHeight), 0);
    
    cout << "info:" << endl
         << "test.avi" << endl
         << "Size:" << frameWidth << "*" << frameHeight << endl
         << "fps:" << fps << endl;
    
    for (int i = 0; i < 1000; i++)
    {
        sprintf(image_name, "/home/xxx/cam0/%d.png",i);
        cout<<image_name<<endl;
        src = imread(image_name, 1);

        if (src.empty())
        {
            cout<<"全部图像加载完成!"<<endl;
            break;
        }
        writer<<src;
		if (cvWaitKey(5) > 0)                  
			break;
    }

    writer.release();
    destroyAllWindows();

    return 0;
}

参考其他博客:
https://www.fourcc.org/fourcc.php
https://brucedone.com/archives/1194
https://blog.csdn.net/cow_boy001/article/details/8294403?locationNum=1&fps=1

标签:视频,int,Opencv,codecCV,fps,序列,格式,FOURCC
来源: https://blog.csdn.net/yongniao9185/article/details/112692609