当前位置: 首页 > news >正文

Ubuntu系统VScode实现opencv(c++)视频的处理与保存

通过OpenCV等计算机视觉工具,开发者可以像处理静态图像一样对视频流逐帧分析:从简单的裁剪、旋转、色彩校正,到复杂的稳像、目标跟踪、超分辨率重建。而如何将处理后的高帧率、高动态范围数据高效压缩并封装为通用格式(如MP4、AVI),则决定了成果能否跨越设备与平台无缝传播。

到这里,我们已经学会了如何调用摄像头以及播放视频,接下来是视频的属性及处理后如何保存。

对于视频来说,其实就是每一帧的图片,那么视频也是有宽和高的,还有视频的帧率以及这个视频总共有多少帧图片。

1.宽高

    int frame_width = capture.get(CAP_PROP_FRAME_WIDTH);int frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);

当然,我们也可以通过set设置我们想要的宽高,但是必须是硬件支持对应的宽高比; 

    int frame_width = capture.set(CAP_PROP_FRAME_WIDTH);int frame_height = capture.set(CAP_PROP_FRAME_HEIGHT);

2.总共帧率

这段代码就是获取这个导入视频的总共帧率。 如果调用摄像头理论就是-1。

int count = capture.get(CAP_PROP_FRAME_COUNT);

3.实时帧率 

这段代码就是获取视频的实时帧率。 

int fps = capture.get(CAP_PROP_FPS);

那么整体代码如下:这里我打印了相关信息,以便验证

void Demo::video_Demo(Mat &image)
{VideoCapture capture(0);int frame_width = capture.get(CAP_PROP_FRAME_WIDTH);int frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);int fps = capture.get(CAP_PROP_FPS);int count = capture.get(CAP_PROP_FRAME_COUNT);cout<<"frame_width:"<<frame_width<<endl;cout<<"frame_height:"<<frame_height<<endl;cout<<"fps:"<<fps<<endl;//每秒多少怎帧cout<<"count:"<<count<<endl;//总共有多少帧Mat frame;while (1){capture.read(frame);if (frame.empty())break;// Do somethingflip(frame,frame,1);colorspace_Demo(frame);int c = waitKey(10);if (c == 27){capture.release();//释放摄像头break; }}
}

运行结果:当我们调用摄像头,总帧率count给的就是-1,而导入视频时,就会给出确切的视频总帧率。

 

视频保存

 首先我们需要实例化一个保存的类VideoWriter

VideoWriter save("/home/xlh/c++code/2.MP4",VideoWriter::fourcc('a','v','c','1'),
fps,Size(frame_width,frame_height),true);

 第一个参数是保存的路径,第二个参数是视频的编码方式,第三个是视频的实时帧率,第四个是视频的宽高比。

紧接着我们只需要在每一帧处理后的代码加上一个方法调用就可以保存视频了。

void Demo::video_Demo(Mat &image)
{VideoCapture capture("/home/xlh/c++code/1.webm");int frame_width = capture.get(CAP_PROP_FRAME_WIDTH);int frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);int fps = capture.get(CAP_PROP_FPS);int count = capture.get(CAP_PROP_FRAME_COUNT);cout<<"frame_width:"<<frame_width<<endl;cout<<"frame_height:"<<frame_height<<endl;cout<<"fps:"<<fps<<endl;//每秒多少怎针cout<<"count:"<<count<<endl;//总共有多少针VideoWriter save("/home/xlh/c++code/2.MP4",VideoWriter::fourcc('a','v','c','1'),fps,Size(frame_width,frame_height));Mat frame;while (1){capture.read(frame);if (frame.empty())break;// Do somethingflip(frame,frame,1);colorspace_Demo(frame);save.write(frame);//视频保存int c = waitKey(10);if (c == 27){capture.release();//释放摄像头save.release();break; }}
}

这里后改动的地方是 save.write(frame);以及save.release();我们保存完成后就要释放这个资源。

 这样就完成保存了。

这里我运行后已经保存了我的视频为2.MP4。

 

http://www.lryc.cn/news/608979.html

相关文章:

  • C语言与数据结构:从基础到实战
  • 解决飞书文档中PDF文档禁止下载的问题
  • Linux 环境下 Docker 安装与简单使用指南
  • ubuntu syslog中appindicator报错解决
  • 扩散模型(一)——综述
  • Rust: 获取 MAC 地址方法大全
  • 【MySQL进阶】------MySQL程序
  • 机器学习第三课之逻辑回归(三)LogisticRegression
  • 2025H1具身智能产业十大数据
  • Python训练营打卡 Day27
  • 【网络安全】日志文件格式
  • Linux 系统调用 stat 完全用例
  • Web前端文件上传安全与敏感数据安全处理
  • HiveMQ核心架构思维导图2024.9(Community Edition)
  • 反向代理+网关部署架构
  • 动态置信度调优实战:YOLOv11多目标追踪精度跃迁方案(附完整代码)
  • 关于corn
  • Android 之 图片加载(Fresco/Picasso/Glide)
  • 禁闭求生2 免安 中文 离线运行版
  • 【数据结构与算法】数据结构初阶:排序内容加餐(二)——文件归并排序思路详解(附代码实现)
  • 【LeetCode 热题 100】84. 柱状图中最大的矩形——(解法一)单调栈+三次遍历
  • 二叉树的锯齿形层次遍历
  • 9.苹果ios逆向-FridaHook-ios中的算法(CCCrypt)
  • CCF-GESP 等级考试 2025年6月认证C++一级真题解析
  • wordpress登陆前登陆后显示不同的顶部菜单
  • 最简单的零基础软件测试学习路线
  • Libevent(5)之使用教程(4)工具
  • k8s黑马教程笔记
  • 快速搭建一个非生产k8s环境
  • 【运维基础】Linux 硬盘分区管理