opencv的VideoWriter类及参数用于保存视频

2023-12-28 02:38

本文主要是介绍opencv的VideoWriter类及参数用于保存视频,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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类及参数用于保存视频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/544893

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时