当前位置: 首页 > 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的价值,这一领域的研究与实践活动日益活跃。本…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...