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

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.xdnf.cn/news/17116.html

相关文章:

  • 基于单片机火灾报警系统/防火防盗系统设计
  • linux下jvm之jstack的使用
  • 应急响应整理
  • 百度网盘SVIP下载速度异常
  • 浅谈Python中的os.environ:环境变量交互机制
  • 基于Springboot+UniApp+Ai实现模拟面试小工具八:管理端基础功能实现
  • mybatis-plus从入门到入土(四):持久层接口之BaseMapper和选装件
  • OSPF HCIP
  • CICD--自动化部署--jinkins
  • 微服务的使用
  • SpringAI无人机智能灌溉、本地化AI推理、分析气象站、分析球场草皮系统实践
  • 【openlayers框架学习】十一:openlayers实战功能介绍与前端设计
  • 图像张量中的通道维度
  • 计算机网络:如何在实际网络中进行子网划分
  • 机器翻译入门:定义、发展简史与核心价值
  • Day23--回溯--39. 组合总和,40. 组合总和 II,131. 分割回文串
  • SQL 地理空间原理与实现
  • GLM-4.5 解读:统一推理、编码与智能体的全能王
  • PYTHON从入门到实践-18Django模版渲染
  • 电力电子技术知识总结-----PWM知识点
  • OS21.【Linux】环境变量
  • 第八章:进入Redis的SET的核心
  • adb 与pad 交互方法
  • [每周一更]-(第154期):Docker 底层深度剖析:掌控 CPU 与内存资源的艺术
  • idea中.xml文件的块注释快捷键
  • Suno的100个高质量歌词元标签(MetaTags)详解与使用指南
  • 网安-逻辑漏洞-23登陆验证
  • 文明存续的时间博弈:论地球资源枯竭临界期的技术突围与行动紧迫性
  • lua中 list.last = last 和list[last]=value区别
  • 悬挂的绳子,它的函数方程是什么样子的?