VideoWriter

  • 说明
  • 参数
  • 例子
    • 例一:修改视频的分辨率
    • 例二:在视频的指定区域画圆
    • 例三:对彩色图像的每个通道单独进行处理
  • 错误的情况
    • 1.图片的分辨率大小
    • 2.路径

说明

要使用OpenCV保存视频,首先系统要先安装ffmpeg库,以及opencv的库是否正常链接了ffmpeg。OpenCV只支持保存.avi格式的视频,保存的视频目前无法避免被压缩,而且不能添加音频。

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

参数

1、filename 保存输出视屏文件名;
2、fourcc 四个字符用来表示压缩帧的codec,最常用的是CV_FOURCC(‘M’,‘J’,‘P’,‘G’) = motion-jpeg codec,另外也有:
CV_FOURCC(‘P’,‘I’,‘M’,‘1’) MPEG-1 codec
CV_FOURCC(‘M’,‘J’,‘P’,‘G’) motion-jpeg codec (does not work well)
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
3、fps保存视屏文件帧率;
4、frameSize视屏文件宽高;
5、isColor设置视屏文件为彩色或者灰度;

需要注意要保存的图片的类型是否为CV_8UC3或者CV_8U,不支持CV_8UC4;

例子

例一:修改视频的分辨率

#include<opencv2/opencv.hpp>
#include<iostream>using namespace std;
using namespace cv;int main()
{VideoCapture capture("./video/left_02.mp4");//获取视频,根据自己的视频位置更改if (!capture.isOpened())return -1;Mat frame;capture.set(CAP_PROP_FRAME_WIDTH, 640);capture.set(CAP_PROP_FRAME_HEIGHT, 480);Mat image;//VideoWriter(const String & filename, int fourcc, double fps,Size frameSize, bool isColor = true);VideoWriter videowriter("./output/result11.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), 30, Size(640, 480), true);   //改变图像的帧速为30,图像帧的大小是(640,480)while (capture.read(image)){imshow("image", image);resize(image, image, Size(640, 480), INTER_LINEAR);videowriter.write(image);waitKey(1);}waitKey();return 0;}

例二:在视频的指定区域画圆

#include <opencv2/opencv.hpp>
#include <iostream>int main(int argc, char **argv)
{cv::Size image_size(640, 480);std::string outputVideoPath = "./image_save.avi";cv::VideoWriter outputVideo;outputVideo.open(outputVideoPath,CV_FOURCC('M', 'P', '4', '2') , 20.0, image_size);   std::vector<string> imagelist;std::cout << std::endl << "---Begin----" << std::endl;for (int ni = 0; ni < imagelist.size(); ni++){// Read images img = cv::imread(imagelist[ni]);// for showcv::putText(img, "(100,100)",cv::Point2f(100,100), 1,1, cv::Scalar(255, 0, 0), 1);cv::circle(img, cv::Point2f(100,100), 2, cv::Scalar(255, 0, 0), 1);outputVideo << img;cv::imshow("img", img);cv::waitKey(1);}img.release();return 0 ;
}

例三:对彩色图像的每个通道单独进行处理

#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/opencv.hpp>
#include<iostream>using namespace cv;
using namespace std;int main()
{//cap1是左边镜头,cap2是右边镜头VideoCapture cap1("./video/left_02.mp4");VideoCapture cap2("./video/right_02.mp4");double rate = 60;int delay = 1000 / rate;bool stop(false);Mat frame1;Mat frame2;Mat frame;Point2i a;//存储偏移量VideoWriter videowriter("./output/result222.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), 30, Size(1920, 1080), true);   //改变图像的帧速为30,图像帧的大小是(1920,1080)if (cap1.isOpened() && cap2.isOpened()){cout << "*** ***" << endl;cout << "摄像头已启动!" << endl;}else{cout << "*** ***" << endl;cout << "警告:摄像头打开不成功或者未检测到有两个摄像头!" << endl;cout << "程序结束!" << endl << "*** ***" << endl;return -1;}Mat image, image2;while (!stop){if (cap1.read(frame1) && cap2.read(frame2)){imshow("cam1", frame1);imshow("cam2", frame2);//彩色帧转灰度//cvtColor(frame1, frame1, COLOR_RGB2GRAY);//cvtColor(frame2, frame2, COLOR_RGB2GRAY);//imshow("cvtColor1", frame1);//imshow("cvtColor2", frame2);image = frame1;Mat src = image;Mat res(src.rows, src.cols, CV_8UC3); //用来存储目的图片的矩阵imshow("src", src);//Mat数组来存车分离后的三个通道,每个通道都初始化为0;//matlab 的排列顺序是R,G,B; 而在opencv中,排列顺序是B,G,R。 Mat planes[] = { Mat::zeros(src.size(), CV_8UC1),Mat::zeros(src.size(), CV_8UC1), Mat::zeros(src.size(), CV_8UC1) };//多通道分成3个单通道   split(src, planes);//在OpenCV中,一张3通道图像的一个像素点是按BGR的顺序存储的。,可以通过planes[0],planes[1],planes[2]分别对每一个通道进行处理merge(planes, 1, res);  //通道合并,三通道合并为一个完整的彩色图imshow("name", res);waitKey(1);}}return 0;
}

错误的情况

1.图片的分辨率大小

VideoWriter 定义时候视频的分辨率的大小一定要和我们存储的图片的分辨率的大小一致,否则输出为0k。

2.路径

存储的路径需要为中文

opencv的VideoWriter类及参数用于保存视频相关推荐

  1. 利用OpenCV的VideoWriter类实现视频的写操作

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 就不多介绍VideoWriter类了,大家一看代 ...

  2. opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)

    opencv基本操作二 要点 代码 例程一 例程二 要点 opencv常用读视频函数 cv2.VideoCapture .cv2.VideoCapture.get 等,可以参考这里 opencv常用写 ...

  3. 【OpenCV 4开发详解】图像与视频的保存

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  4. 【Opencv基础学习】 VideoWriter打开本地摄像头并保存mp4格式视频

    你好! 这是我第一次用CSDN编写博客.该专栏博客主要来记录学习使用Opencv过程中所遇到的问题及解决方案. 这篇博客主要记录了使用Opencv打开本地摄像头录制视频,并保存为*.mp4文件格式视频 ...

  5. OpenCV API使用笔记 —— 4. 如何保存视频文件

    文章目录 写入图片帧信息 C/CPP示例 Python示例 在<OpenCV API使用笔记 -- 1. 如何打开摄像头或视频文件> 介绍过使用「VideoCapture」类,可以打开摄像 ...

  6. OpenCV 笔记(02)— 图像显示、保存、腐蚀、模糊、canny 边缘检测(imread、imshow、namedWindow、imwrite)

    OpenCV 提供两种用户界面选项: 基于原生用户界面的基本界面,适用于 Mac OS X 的 cocoa 或 carbon,以及适用于 Linux 或 Windows 用户界面的 GTK ,这些界面 ...

  7. Opencv中VideoWriter详解

    目录 一.简介 二.应用难点 1.打不开 2.保存文件为空 3.保存文件打不开 三.实例代码 参考网址 一.简介 在试验中需要常常将实验结果进行保存,在opencv中提供很好用的录制视频的句柄,也可称 ...

  8. OpenCV 用 VideoWriter 创建视频(Python 版本)

    用 OpenCV 开发难免会针对 Camera 或者是 Video 做处理,有的时候需要将画面保留下来,这个时候最佳方案是保存成一个 .avi 的文件. OpenCV 底层是用 FFMEPG 进行多媒 ...

  9. Opencv读取视频、打开摄像头、保存视频和视频倒放

    原文出处:https://blog.csdn.net/yang_xian521/article/details/7440190 看了这个觉得说得很对,说白了Opencv主要针对是图像处理的计算机视觉库 ...

最新文章

  1. 实例入手vue-router重定向
  2. 设备管理学习之概念篇
  3. 经典面试题SALES TAXES思路分析和源码分享
  4. 抬头遇见图灵奖得主和全球顶尖科学家?超豪华阵容智源大会求带我一个!
  5. Please make sure you have the correct access rights and the repository exists.
  6. hibernate中查询方式(一):
  7. 【转载】.NET系统学习----Assembly
  8. kubernetes挂载ceph rbd和cephfs的方法
  9. python菜鸟教程python基础教程
  10. 基于ExtendSim的六西格玛银行排队模型
  11. arcgis地理空间数据库学习记录01-复制地理数据库
  12. 手机wps怎么设置打印横竖_WPS中横竖打印怎么设置
  13. Vue若依管理系统-实现管理员配置首页计数框/折线图
  14. 使用键盘设置桌面计算机图标的显示不出来,显示桌面,小编教你显示桌面图标不见了如何恢复...
  15. 【计算机网络】网络层 : 无分类编址 CIDR ( 编址发展 | CIDR 优点 | CIDR 相关计算 | 构成超网 | 最长前缀匹配 | 计算示例 )★
  16. 拥塞控制,CDN,端到端
  17. [愚见]Lightening Network for Low-LightImage Enhancement
  18. 用 LCD1602 显示的时钟
  19. Spring框架的基本使用
  20. 华为eNSP模拟器软件介绍和基础命令详解

热门文章

  1. PostgreSQL常用字符串函数和时间函数:
  2. 商城网站测试报告应该怎么写
  3. 爬虫相关,python异常值的处理/防错机制的建立
  4. 4. 选股(基金)神器 —— 证券基本分析
  5. RTB--Real TimeBidding模式的互联网广告(实时竞价的广告投放)
  6. 计算机网络检测和评估标准,网络安全检测与评估技术
  7. SpringBoot 控制器方法自定义参数注入
  8. AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理、区块链和爬虫技术的智能会议系统》软件系统案例的界面简介、功能介绍分享之一、会前智能
  9. 什么是阿里云服务器?云服务器的优缺点
  10. 兔子繁殖问题 (java)