实验室的项目是处理视频,所以就从视频的读取和写入开始吧!

常用的接口有C++和Python,Python肯定要简洁许多,不过因为项目需要,还是用C++了(PS:其实是我被Python的速度惊到了...)

cv::VideoCapture类

 

这个对象就是读入视频的了,完整的操作有很多,这里只提及最普遍的用法。具体可见:https://docs.opencv.org/3.1.0/d8/dfe/classcv_1_1VideoCapture.html

1、对象的构造函数,如下面的例子:

cv::VideoCapture capture("D:\\Camera Road 01.avi");

参数为const string&,即读入彩色图像,若设置为0则读取摄像头。

2、验证视频读入是否成功,如下:

if (!capture.isOpened())
{
std::cout << "Vidoe open failed!" << std::endl;
return -;
}

3、验证完成后,就可以开始读取视频啦!

cv::Mat frame;
capture >> frame;

VideoCapture对象的操作可以像流一样读入到Mat类型的对象(即图像)中。

cv::VideoWriter类

这个类是用来写入一个视频的,使用起来比capture麻烦一些。

构造函数 cv::VideoCapture(const string& path,int fourcc,double fps, Size framesize, bool isColor=true)

需要注意的是fourcc,cv::VideoWriter::fourcc(char c1,char c2,char c3,char c4)

常用的格式有

  • 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

剩下的就与VideoCapture差不多了,不过是输出流的操作。

下面是一段完整的读取视频,进行处理并导出视频:

#include <opencv2/opencv.hpp>
#include "highgui.h"
#include <string>
using namespace std;
using namespace cv;
int main()
{
Mat frame;
string filename = "D:\Camera Road 01.avi";
VideoCapture cap(filename);
VideoWriter out;
out.open("D:\\out.avi", CV_FOURCC('X', 'V', 'I', 'D'),cap.get(CV_CAP_PROP_FPS),Size(cap.get(CV_CAP_PROP_FRAME_WIDTH),cap.get(CV_CAP_PROP_FRAME_HEIGHT)));
if (!cap.isOpened())
{
cout << "Video load failed!" << endl;
return -;
}
while ()
{
cap >> frame;
if (frame.empty())
{
cout << "Video process finished!" << endl;
return ;
}
imshow("video", frame);
if (waitKey() == 'q') break;
out << frame;
}
cap.release();
return ;
}

Tip:

我遇到了一个问题,就是写入的视频经常是6KB。如果出了这个问题,注意检查输入和输出的视频是否分辨率一致,以及颜色一致。还有一种情况,就是写入的帧是局部变量还是全局变量,这个具体原因还有待考证....

最新文章

  1. Linux(CentOS 6.7)下配置Mono和Jexus并且部署ASP.NET MVC3、4、5和WebApi(跨平台)
  2. CPC CPM
  3. 【SQL Server】SQL Server基础之存储过程
  4. GIt 从入门到放弃
  5. 一个关于发邮件的类,可以模拟发送对smtp服务器或者是本地文件夹
  6. 在Linux 5/6上使用UDEV SCSI规则配置ASM DISK
  7. js运动 淡入淡出
  8. 百度UEditor编辑器使用教程与使用方法
  9. 《暗黑世界GM管理后台系统》部署+功能说明
  10. html5标签收集
  11. WeiFenLuo.winFormsUI.Docking.dll的使用(停靠效果)
  12. C# 经典入门12章-System.Collections.Generic命名空间
  13. GitLab搭建详细过程
  14. 测试驱动开发实践5————testSave之修改文档分类
  15. 蓝书例题之UVa 10253 Series-Parallel Networks
  16. 7zip 18.3性能测试
  17. CodeForce Div 2 C. Masha and two friends
  18. container and Injection
  19. CSS和DIV
  20. 1-1.flutter学习笔记(一)git入门(msysgit图文安装)

热门文章

  1. 计算机视觉人脸相关开源项目总结:face_recognition
  2. 转:给 Android 开发者的 RxJava 详解
  3. call lua function from c and called back to c
  4. 【Jqurey EasyUI+Asp.net】----DataGrid数据绑定,以及增、删、改(SQL)
  5. spring MVC使用Interceptor做用户登录判断
  6. 【转载】Open Live Writer 安装
  7. struts(转)
  8. 每天一个JavaScript实例-apply和call的使用方法
  9. Django 之 中间件
  10. 关于sh,bash和dash