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

怎样建一个免费网站网络科技公司实习周记

怎样建一个免费网站,网络科技公司实习周记,海口网站建设优化,会员管理系统小程序使用 C/OpenCV 将多张图片合成为视频 🎞️ 将一系列静态图片合成为动态视频是一项常见的计算机视觉任务,广泛应用于延时摄影、动画制作和数据可视化等领域。其基本原理是将图片作为视频的每一“帧”,按照指定的帧率 (FPS) 依次写入视频文件。…

使用 C++/OpenCV 将多张图片合成为视频 🎞️

将一系列静态图片合成为动态视频是一项常见的计算机视觉任务,广泛应用于延时摄影、动画制作和数据可视化等领域。其基本原理是将图片作为视频的每一“帧”,按照指定的帧率 (FPS) 依次写入视频文件。

使用 C++ 和 OpenCV,我们可以通过 cv::VideoWriter 类轻松实现这一功能。


主要步骤

  1. 准备图片序列:确保所有待合成的图片尺寸一致,并按照顺序命名(例如 img_001.png, img_002.png, …)。
  2. 获取图片尺寸:读取第一张图片以确定视频的宽度和高度。
  3. 创建视频写入器:初始化一个 cv::VideoWriter 对象,设置输出视频的文件名、编码格式 (FourCC)、帧率 (FPS) 和帧尺寸。
  4. 循环写入帧:遍历所有图片,依次读取并将它们作为帧写入 VideoWriter 对象。
  5. 释放资源:完成所有图片的写入后,释放 VideoWriter 对象以确保视频文件被正确保存。

C++ 完整代码示例

下面的代码演示了如何读取一个文件夹内命名为 image_0.jpg, image_1.jpg, … 的图片序列,并将它们合成为一个 MP4 视频。

#include <iostream>
#include <vector>
#include <string>
#include <opencv2/opencv.hpp>int main() {// 1. 设置视频参数和图片路径std::string outputPath = "output_video.mp4";std::string imagePathPrefix = "image_"; // 图片文件名前缀std::string imagePathSuffix = ".jpg";   // 图片文件名后缀int numImages = 100;                    // 图片总数double fps = 24.0;                      // 视频的帧率// 2. 读取第一张图片以获取尺寸cv::Mat firstImage = cv::imread(imagePathPrefix + std::to_string(0) + imagePathSuffix);if (firstImage.empty()) {std::cout << "错误: 无法读取第一张图片,请检查路径和文件名。" << std::endl;return -1;}cv::Size frameSize = firstImage.size();int frameWidth = frameSize.width;int frameHeight = frameSize.height;// 3. 创建视频写入器// 使用 'mp4v' 编码格式来创建 .mp4 文件int fourcc = cv::VideoWriter::fourcc('m', 'p', '4', 'v');cv::VideoWriter writer(outputPath, fourcc, fps, frameSize, true);if (!writer.isOpened()) {std::cout << "错误: 无法创建视频写入器。" << std::endl;return -1;}std::cout << "开始合成视频,共 " << numImages << " 帧..." << std::endl;// 首先写入第一帧writer.write(firstImage);// 4. 循环读取图片并写入视频帧for (int i = 1; i < numImages; ++i) {std::string currentImagePath = imagePathPrefix + std::to_string(i) + imagePathSuffix;cv::Mat currentFrame = cv::imread(currentImagePath);if (currentFrame.empty()) {std::cout << "警告: 无法读取图片 " << currentImagePath << ",跳过此帧。" << std::endl;continue;}// 确保后续图片尺寸与第一张一致if (currentFrame.size() != frameSize) {std::cout << "警告: 图片 " << currentImagePath << " 尺寸不一致,将调整尺寸。" << std::endl;cv::resize(currentFrame, currentFrame, frameSize);}writer.write(currentFrame);}// 5. 释放资源writer.release();std::cout << "视频合成完毕,已保存至 " << outputPath << std::endl;return 0;
}

代码解析

  • 图片命名规则
    为了方便地在循环中读取,图片最好按 前缀 + 数字 + 后缀 的方式顺序命名。代码中的 imagePathPrefiximagePathSuffix 就是为此设计的。

  • cv::VideoWriter writer(...)
    这是创建视频文件的核心。它需要以下几个关键参数:

    • outputPath: 输出视频的文件名,后缀名(如 .mp4.avi)很重要,它会影响可选的编码格式。
    • fourcc: 一个4字节的代码,用于指定视频的压缩编码格式。cv::VideoWriter::fourcc('m', 'p', '4', 'v') 是生成 .mp4 文件时常用的编码格式。对于 .avi 文件,可尝试 cv::VideoWriter::fourcc('M', 'J', 'P', 'G')
    • fps: 视频的每秒帧数 (Frames Per Second)。它决定了视频的播放速度。
    • frameSize: 视频帧的尺寸 (cv::Size 类型),必须与所有待写入图片的尺寸一致。
    • isColor: 一个布尔值,true 表示创建彩色视频,false 表示灰度视频。默认为 true
  • writer.write(currentFrame);
    这个函数将一个 cv::Mat 对象(即一张图片)作为一帧写入视频文件。循环调用此函数即可将图片序列编码成视频。

  • writer.release();
    这是一个至关重要的步骤。在所有帧都写入后,必须调用 release() 方法。这个操作会完成视频文件的编码和封装,并最终将其写入磁盘。如果没有调用此方法,生成的视频文件很可能是损坏的或空的。


总结

通过 cv::VideoWriter,OpenCV 提供了一个强大而直接的接口来完成图片到视频的合成。整个过程的逻辑非常清晰:配置视频参数 -> 循环读取图片 -> 将图片作为帧写入。只要保证图片尺寸一致并正确设置写入器参数,就可以轻松地将静态序列转化为生动的视频。


文章转载自:

http://3M7r23Qk.hLmkx.cn
http://CcZk2EnZ.hLmkx.cn
http://hZkz5Bdf.hLmkx.cn
http://XsDc4dLy.hLmkx.cn
http://j5kjZrAB.hLmkx.cn
http://rAJ4hr1E.hLmkx.cn
http://dtMryNHp.hLmkx.cn
http://vpoUjB22.hLmkx.cn
http://ta8NoEee.hLmkx.cn
http://4hmWbzJb.hLmkx.cn
http://BlP4uoEq.hLmkx.cn
http://xzt49na4.hLmkx.cn
http://PGdllyvP.hLmkx.cn
http://oaeDvUGY.hLmkx.cn
http://jCzt3Dl8.hLmkx.cn
http://42qArin5.hLmkx.cn
http://rMsUO2kk.hLmkx.cn
http://ybTZDOQA.hLmkx.cn
http://erWQaL7B.hLmkx.cn
http://KXbtOjpc.hLmkx.cn
http://sbwLqolm.hLmkx.cn
http://0vnP4DS5.hLmkx.cn
http://JrcHj1Qf.hLmkx.cn
http://P2eYJqip.hLmkx.cn
http://ZmyWnUe9.hLmkx.cn
http://fedXIdVc.hLmkx.cn
http://cahy4CM5.hLmkx.cn
http://WzRzY8s6.hLmkx.cn
http://7joXypZd.hLmkx.cn
http://5LV3LVed.hLmkx.cn
http://www.dtcms.com/wzjs/707285.html

相关文章:

  • 用网站源码怎么做网站在义乌做电商怎么起步
  • 网站排名top排行榜巢湖网站建设
  • 合适的网站建设明细报价表dw个人网页制作代码
  • 旅游信息网站开发05网数学
  • 怎么搞自己的网站最近一周的时政热点新闻
  • 东莞物流网站设计公司工作职责怎么写
  • 企业网站建设教程视频网站建设与维护培训
  • 做网站竞价还需要推广公司wordpress时光轴主题
  • 东莞做网站一年费用网站建设找什么工作室
  • vps 网站备案乐清虹桥门户网
  • 河北建设厅安监站官方网站免费创一个网站
  • 深圳网站建设 联雅企业网盘收费标准
  • 企业网站开发计划书软件技术专业课程
  • 高职高专网站建设与维护做网站的教程
  • 做网站的素材哪里找的山西省和城乡建设厅网站
  • 南安市城乡住房建设局网站做视频网站要多大的带宽
  • 鲜花网站素材成都自然排名优化
  • 事业单位 网络网站建设站长之家权重查询
  • 动漫网站开发毕业设计线上推广方案模板
  • 西安网站建设咪豆电商平台开网店
  • 做网站设计的论文中摘要怎么写自学软件开发
  • 北京网站制作建设化妆品行业网站建设
  • 企业网站建设找外包公司做凡客网站目录优化
  • 河南郑州做网站的公司天河区建设网站
  • 怎么做网站的seo排名知乎微网站和普通网站区别
  • 做网站哪家好 青岛答题做任务网站
  • 企业网站开发一薇广州做网站mxszpt
  • 烟台好的网站设计公司门户网站定制
  • 成都网站建设哪家公司好wordpress 直排主题
  • 建材企业网站营销怎么做承德建设网站