【opencv2】对视频的操作

opencv2中,提供了两个视频操作相干的类,VideoCaptureVideoWriter,固然也有相对应的构造函数。

VideoCapture,其有以下几个操作函数:

open(const string &filename)    //打开视频文件

open(int device)              //打开摄像头,device为装备序号

isOpened()   //判断视频文件或摄像头是不是打开,其返回值为bool

release()   //关闭视频文件或摄像头

grab()     //获得视频或摄像头下1帧,若获得成功,则返回TRUE,其函数类型也是bool型。

retrieve(Mat& image , int channel=())  //解码刚刚获得到的1帧图象,并将其赋给image,这个函数的返回值也是bool型。

read(Mat& image) //获得、解码和读取视频的下1帧。在opencv中,其用“>>”操作符重载了这个函数,即  video >> image

get(int propId)  //返回视频的属性

       propId取值不同,则返回的属性也不同。当propId取以下值时:

       CV_CAP_PROP_POS_MSEC 以毫秒或时间戳的情势当前视频文件的位置

       CV_CAP_PROP_POS_FRAMES 0开始的视频帧解码捕获索引

       CV_CAP_PROP_POS_AVI_RATIO  视频的相对位置,0为开始,1为结束

       CV_CAP_PROP_FRAME_WIDTH  视频帧图片的宽度

       CV_CAP_PROP_FRAME_HEIGHT  视频帧图片的高度

       CV_CAP_PROP_FPS  帧率

       CV_CAP_PROP_FOURCC 视频的4字符代码

       CV_CAP_PROP_FRAME_COUNT  视频的总帧数

       CV_CAP_PROP_FORMAT  视频的图片格式

       CV_CAP_PROP_MODE  后端特定值唆使当前捕获模式

       下面几个属性只在摄像模式下有效:

       CV_CAP_PROP_BRIGHTNESS  图象的亮度

       CV_CAP_PROP_CONTRAST    图象对照度

       CV_CAP_PROP_SATURATION  图象的饱和度

       CV_CAP_PROP_HUE          图象的色度

       CV_CAP_PROP_EXPOSURE    图象的暴光

       CV_CAP_PROP_CONVERT_RGB图象是不是转换为RGB

set(int propId)  //设置属性,其参数的取值和get函数的取值1样

 

VideoWriter,其有以下几个操作函数:

open(const string &filename, int fourcc, double fps, Size frameSize, color = true)

    以上几个参数在上文中均已介绍过了。

isOpened()  //与前面的是1个意思

write(const Mat& image)  //opencv中也一样重载了这个函数,即用操作符<<

 

下面看段程序,程序的功能是将1个段视频变小,即原来1024*780的视频,变成320*280,为了多使用几个视频操作函数,所以有些地方可以大大简化或修改的我没有修改,为了展现1下各个函数的用法。

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

using namespace std;
using namespace cv;

int main(int argc, const char** argv)
{
Mat frame;
VideoCapture video;
VideoWriter newVideo;
double fourcc, fps, width, height;

video.open("25.avi"); //打开视频
fourcc = video.get(CV_CAP_PROP_FOURCC);
fps = video.get(CV_CAP_PROP_FPS);
width = video.get(CV_CAP_PROP_FRAME_WIDTH);
height = video.get(CV_CAP_PROP_FRAME_HEIGHT); //得到视频的1些参数
//新建1个新的视频
markVideo.open("markVideo10.avi", fourcc, fps);
if (video.isOpened() && markVideo.isOpened() )
{
while(true){
video >> frame; //读取视频的每个帧
resize(frame, frame, Size(320, 280)); //将视频的每帧都缩小
if (!frame.empty()){
markVideo << frame; //将缩小后的每个帧都写进新的视频
}
else{printf(" –(!) No captured frame — Break!"); break;}
if ((char)waitKey(1) == 'c') {
video.release(); markVideo.release();
break;
}
}
}
return 0;
}

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 【opencv2】对视频的操作

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡