您的位置:首页 > 运维架构

opencv学习——视频读取、处理、保存

2017-08-29 12:39 447 查看
opencv3

代码如下:

#include <QCoreApplication>

#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include "stdio.h"

using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
//【1】读入视频
VideoCapture capture("/home/chen/pg/qt/video/video/1.flv");
//检测是否正常打开:成功打开时,isOpened返回ture
if(!capture.isOpened())
cout<<"fail to open!"<<endl;
//获取整个帧数
long totalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);
cout<<"整个视频共"<<totalFrameNumber<<"帧"<<endl;

//获取帧率
double fps = capture.get(CV_CAP_PROP_FPS);
cout<<"帧率为:"<<fps<<endl;
//两帧间的间隔时间:
int delay = 1000/fps;

Size dst_size;   //修改目标尺寸
dst_size.width=288;
dst_size.height=288;

VideoWriter videoWriter("/home/chen/pg/qt/video/video/2.flv", CV_FOURCC('F', 'L', 'V', '1'), fps, dst_size);
// VideoWriter videoWriter("/home/chen/pg/qt/video/video/2.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, dst_size);
Mat frame;

//读取原视频的画面大小
/*
capture>>frame;
int col= int(frame.cols);
int row= int(frame.rows);
cout << "cols=" << col << endl;
cout << "rows=" << row;
*/

while (1)
{
capture>>frame;  //读取当前帧
Mat dstimg;
//改变图像大小
resize(frame,dstimg,dst_size,0, 0, INTER_LINEAR);

videoWriter<
4000
<dstimg;

if(frame.empty()) //若视频完成播放,则退出循环
{
break;
}
imshow("读取视频",dstimg);  //显示当前帧
waitKey(delay);  //延时40ms
}
capture.release();

/*
//【2】循环显示每一帧
while(1)
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture>>frame;  //读取当前帧
Mat dstimg;
resize(frame,dstimg,dst_size,0, 0, INTER_LINEAR);

if(frame.empty()) //若视频完成播放,则退出循环
{
break;
}
imshow("读取视频",dstimg);  //显示当前帧
waitKey(delay);  //延时30ms
}*/

return 0;
}


附加内容:

VideoWriter类。

这个类是highgui交互很重要的一个工具类,可以方便我们容易的将图片序列保存成视频文件。类内成员函数有构造函数,open,isOpened,write(也可以用<<),使用还是很简单的。

使用很简单,先调用构造函数确定文件的名称,格式,帧率,帧大小,是否彩色。其中格式作为第二个参数,OpenCV提供的格式是未经过压缩的,目前支持的格式如下:

CV_FOURCC(‘P’, ‘I’, ‘M’, ‘1’) = MPEG-1 codec

CV_FOURCC(‘M’, ‘J’, ‘P’, ‘G’) = motion-jpeg codec

CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec

CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec

CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec

CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec

CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec

CV_FOURCC(‘F’, ‘L’, ‘V’, ‘1’) = FLV1 codec
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: