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

【代码---利用一个小程序,读取文件夹中图片,将其合成为一个视频】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 程序
  • 详细说明
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

创建一个程序将图像合成为视频通常需要使用图像处理和视频编码库。

下面是一个使用Python的例子,其中使用OpenCV来处理图像和生成视频:


提示:以下是本篇文章正文内容,下面案例可供参考

程序

import cv2
import osdef images_to_video(image_folder, video_name, fps=30):images = [img for img in os.listdir(image_folder) if img.endswith(".png")]frame = cv2.imread(os.path.join(image_folder, images[0]))height, width, layers = frame.shapevideo = cv2.VideoWriter(video_name, cv2.VideoWriter_fourcc(*'mp4v'), fps, (width,height))for image in images:video.write(cv2.imread(os.path.join(image_folder, image)))cv2.destroyAllWindows()video.release()if __name__ == "__main__":image_folder = "path/to/your/image/folder"video_name = "output_video.mp4"images_to_video(image_folder, video_name)

详细说明

images = [img for img in os.listdir(image_folder) if img.endswith(".png")]

这行代码是一个列表推导式,用于从指定文件夹中选择以 “.png” 结尾的文件。让我逐步解释它:

os.listdir(image_folder): os.listdir 函数返回指定目录中的文件和文件夹的列表。

for img in os.listdir(image_folder): 这部分是一个 for 循环,遍历指定目录中的每个文件和文件夹。

if img.endswith(“.png”): 这是一个条件语句,用于检查当前文件是否以 “.png” 结尾。如果是,就将它包含在最终列表中。

images = […]: 这将满足条件的文件列表存储在名为 images 的变量中。

因此,整个行的作用是创建一个名为 images 的列表,其中包含指定文件夹中以 “.png” 结尾的所有文件的名称。这个列表将用于后续的图像处理和视频生成步骤。

frame = cv2.imread(os.path.join(image_folder, images[0]))

这行代码使用 OpenCV 的 cv2.imread 函数读取第一张图像,并将其存储在变量 frame 中。让我解释一下:

os.path.join(image_folder, images[0]): 这部分使用 os.path.join 将图像文件夹路径和第一个图像文件的名称连接起来,形成完整的文件路径。images[0] 是 images 列表中的第一个图像文件的名称。

cv2.imread(…): 这是 OpenCV 库中的函数,用于读取图像文件。它接受图像文件的完整路径作为参数,并返回一个表示图像的多维数组(通常是 NumPy 数组)。

frame = …: 将读取的图像存储在名为 frame 的变量中,以便后续用于视频生成。

因此,这行代码的作用是读取第一张图像并将其存储在 frame 变量中,以便在后续步骤中将其添加到视频中。

height, width, layers = frame.shape

这行代码使用 OpenCV 中的 shape 属性获取图像的高度、宽度和通道数。让我解释一下:

frame: 这是之前通过 cv2.imread 读取的图像,存储在变量 frame 中。

frame.shape: shape 属性返回一个包含三个值的元组,分别表示图像的高度、宽度和通道数。

height, width, layers = frame.shape: 将元组中的三个值分别赋给变量 height、width 和 layers。

这行代码的目的是获取读取的图像的尺寸信息,以便在后续步骤中创建视频写入对象时使用。这些尺寸信息用于设置视频的分辨率。

video = cv2.VideoWriter(video_name, cv2.VideoWriter_fourcc(*'mp4v'),fps, (width,height))

这行代码创建了一个用于写入视频的 cv2.VideoWriter 对象。让我逐步解释:

video_name: 这是要保存的输出视频文件的名称。在代码中,它被设置为之前指定的 video_name。

cv2.VideoWriter_fourcc(*‘mp4v’): 这是视频编解码器的四字符代码。‘mp4v’ 表示使用 MP4 编码格式。cv2.VideoWriter_fourcc 将四字符代码作为参数,通过 *‘mp4v’ 的语法将字符串拆分为单个字符,并传递给函数。

fps: 这是视频的帧率,即每秒显示的图像数。在代码中,它被设置为之前指定的 fps。

(width, height): 这是视频的分辨率,即每一帧图像的宽度和高度。在代码中,它被设置为之前从图像中获取的 width 和 height。

整体而言,这行代码创建了一个 cv2.VideoWriter 对象,用于将图像合成为视频。视频的编码格式为 MP4,帧率为 fps,分辨率为 (width, height)。这个对象将在后续步骤中用于将图像写入视频。

for image in images:
video.write(cv2.imread(os.path.join(image_folder, image)))

这部分代码使用 cv2.imread 读取每张图像,然后通过 video.write 将每张图像写入先前创建的视频文件。让我逐步解释:

for image in images:: 这是一个 for 循环,遍历 images 列表中的每个图像文件。

os.path.join(image_folder, image): 使用 os.path.join 将图像文件夹路径和当前图像文件的名称连接起来,形成完整的文件路径。

cv2.imread(…): 这是 OpenCV 中的函数,用于读取当前图像文件。

video.write(…): 这是 cv2.VideoWriter 对象的方法,用于将读取的图像写入视频。每次迭代都将当前图像写入视频。

这个循环遍历所有图像文件,将它们一个接一个地写入视频。整个视频生成的过程通过不断地读取图像并将其写入视频来完成。最后,通过 cv2.destroyAllWindows() 关闭图像窗口,并通过 video.release() 释放视频写入对象。这样就完成了图像合成为视频的过程。


总结

以上就是一个读取文件夹中图片,将其合成为一个视频的小程序!!!

相关文章:

【代码---利用一个小程序,读取文件夹中图片,将其合成为一个视频】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言程序详细说明总结 前言 提示:这里可以添加本文要记录的大概内容: 创建一个程序将图像合成为视频通常需要使用图像处理和视频编码库。 …...

MVC 和 MVVM的区别

MVC: M(model数据)、V(view视图),C(controlle控制器) 缺点是前后端无法独立开发,必须等后端接口做好了才可以往下走; 前端没有自己的数据中心,太…...

redis—Set集合

目录 前言 1.常见命令 2.使用场景 前言 集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中1)元素之间是无序的2)元素不允许重复,如图2-24所示。一个集合中最多可以存储22 - 1个元素。Redis 除了支持集合内的增删查改操…...

【jetson笔记】vscode远程调试

vscode安装插件 vscode安装远程插件Remote-SSH 安装完毕点击左侧远程资源管理器 打开SSH配置文件 添加如下内容,Hostname为jetson IP,User为登录用户名需替换为自己的 Host aliasHostName 192.168.219.57User jetson配置好点击连接,控制台输…...

大数据处理流程包括哪些环节

大数据处理流程作为当今信息时代的关键技术之一,已经成为各个行业的必备工具。这个流程涵盖了从数据收集、存储、处理、分析到应用的各个环节,确保了数据的有效利用和价值的最大化。 一、数据收集 随着物联网、移动互联网、社交媒体等领域的快速发展&a…...

C++入门篇章1(C++是如何解决C语言不能解决的问题的)

目录 1.C关键字(以C98为例)2.命名空间2.1 命名空间定义2.2命名空间使用 3.C输入&输出4.缺省参数4.1缺省参数概念4.2 缺省参数分类 5. 函数重载5.1函数重载概念5.2 C支持函数重载的原理--名字修饰(name Mangling) 1.C关键字(以C98为例) C总计63个关键字,C语言32…...

java复习篇 数据结构:链表第一节

目录 单向链表 初始 头插 思路 情况一 情况二 代码 尾插 思路 遍历 优化遍历 遍历验证头插 尾插代码 优化 尾插测试 get 思路 代码 测试 insert 思路 代码 优化 测试 remove 移除头结点 提问 移除指定位置 测试 单向链表 每个元素只知道自己的下一个…...

深入理解与运用Lombok的@Cleanup注解:自动化资源管理利器

前言 在Java编程中,正确地管理和释放诸如文件流、数据库连接等资源至关重要。若处理不当,可能会引发内存泄漏或系统资源耗尽等问题。为此,Lombok库提供了一个名为Cleanup的便捷注解,它允许我们以简洁且安全的方式自动关闭实现了j…...

【LeetCode每日一题】2865. 美丽塔 I

2024-1-24 文章目录 [2865. 美丽塔 I](https://leetcode.cn/problems/beautiful-towers-i/) 2865. 美丽塔 I 初始化变量 ans 为0,用于记录最大的和值。获取整数列表的长度,保存到变量 n 中。使用一个循环遍历列表中的每个位置,从0到n-1。在循…...

Cute Http File Server 使用文章

下载 官网:http://iscute.cn/chfs 蓝奏下载:https://wwts.lanpw.com/iKP1i1m9572h 开源:https://github.com/docblue/chfsgui 介绍 Cute Http File Server 是国内免费开源的局域网传输服务器软件。 可以不用借助QQ、某信软件传输文件&am…...

c#算法(10)——求点到直线的距离

前言 在上位机软件开发领域,特别是机器视觉领域,经常会遇到尺寸测量的场景,比如让我们求一个点到一条直线的距离,我们已知了直线上的两个点的坐标,然后又已知了直线外的一个点的坐标,那么如何求出该直线外的一点到直线的距离呢?本文就是来讲解如何求点到直线的距离的,…...

[小脚本] maya 命令行常用操作

其实这些代码大部分是从 chatgpt 中生成的。 骨骼命名 import maya.cmds as cmdsdef rename_bones():selected_bones cmds.ls(type"joint") # 获取选中的骨骼for bone in selected_bones:if "_" in bone:new_name bone.split("_")[0] # 获…...

数据结构·单链表

不可否认的是,前几节我们讲解的顺序表存在一下几点问题: 1. 中间、头部的插入和删除,需要移动一整串数据,时间复杂度O(N) 2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗 3. 增容一般是2倍的增…...

Redis(秒杀活动、持久化之RDB、AOF)

目录 秒杀活动 一、测压工具jmete的使用 二、java实现秒杀活动 1、myseckillcontroller 2、先启动pos请求添加商品,再启动jmeter进行压测 Redis持久化 一 、Redis持久化之RDB 1.RDB是什么 2. 备份是如何执行的 3.Fork 4. RDB持久化流程 5. dump.rdb文件 6…...

Window安装Python和开发Pycharm

准备: 1:安装Python环境 https://www.python.org/downloads/windows/ 2: 下载Pycharm https://www.jetbrains.com/pycharm/download/other.html...

技术驱动宠物健康:宠物在线问诊系统的高效搭建手册

在数字化时代,技术正在催生出许多创新的医疗服务,而宠物在线问诊系统便是其中一项引领潮流的创举。本文将为你提供一份高效搭建宠物在线问诊系统的手册,通过技术代码示例,让你轻松打造一套技术驱动的宠物健康管理系统。 1. 架构…...

玩转k8s:yaml介绍

一.Yaml文件详解 1.Yaml文件格式 (1)Kubernetes 支持 YAML 和 JSON 格式管理资源对象 (2)JSON 格式:主要用于 api 接口之间消息的传递 (3)YAML 格式:用于配置和管理,…...

【spdk】spdk compressdev测试

spdk-23.09\go\rpc\README.md go client 启应用 启哪个应用? ./build/bin/iscsi_tgt --wait-for-rpc & /usr/local/daos-2.4/prereq/release/spdk/share/spdk/scripts/rpc.py bdev_malloc_create -b Malloc0 1024 4096 #1G bs4k /usr/local/daos-2.4/prereq…...

Linux中并发程序设计(进程的创建和回收、exec函数使用)

进程的创建和回收 进程概念 概念 程序 存放在磁盘上的指令和数据的有序集合(文件) 静态的 进程 执行一个程序所分配的资源的总称 动态的进程和程序比较 注:进程是存在RAM中,程序是存放在ROM(flash)中的进程内容 BSS段&#xff…...

2023年DevOps国际峰会暨 BizDevOps 企业峰会(DOIS北京站):核心内容与学习收获(附大会核心PPT下载)

随着科技的飞速发展,软件开发的模式和流程也在不断地演变。在众多软件开发方法中,DevOps已成为当下热门的软件开发运维一体化模式。特别是在中国,随着越来越多的企业开始认识到DevOps的价值,这一领域的研究与实践活动日益活跃。本…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...