【代码---利用一个小程序,读取文件夹中图片,将其合成为一个视频】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 程序
- 详细说明
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
创建一个程序将图像合成为视频通常需要使用图像处理和视频编码库。
下面是一个使用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段ÿ…...
2023年DevOps国际峰会暨 BizDevOps 企业峰会(DOIS北京站):核心内容与学习收获(附大会核心PPT下载)
随着科技的飞速发展,软件开发的模式和流程也在不断地演变。在众多软件开发方法中,DevOps已成为当下热门的软件开发运维一体化模式。特别是在中国,随着越来越多的企业开始认识到DevOps的价值,这一领域的研究与实践活动日益活跃。本…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
