python 用OpenCV 将图片转视频

import os
import cv2
import numpy as npcv2.VideoWriter()参数  cv2.VideoWriter() 是 OpenCV 中用于创建视频文件的类。它的参数如下:
filename:保存视频的文件名。
fourcc:指定视频编解码器的 FourCC 代码,用于将视频压缩成指定格式,例如:“XVID”、“MJPG”, "mp4v"等。可以使用 cv2.VideoWriter_fourcc() 函数来获取 FourCC 代码。
fps:指定视频帧率,即每秒显示的帧数。
frameSize:指定视频帧的大小,即视频的分辨率,可以使用 (width, height) 形式的元组来指定。
isColor:指定是否为彩色视频。如果为 True,则为彩色视频;如果为 False,则为灰度视频。
其中,前三个参数是必需的,后两个参数是可选的。例如:
fps = 25
cv2.VideoWriter('output.avi', cv2.VideoWriter_fourcc(*'XVID'), fps, (640, 480))def resize_img():target_size = (1000, 1000)  # 所有图片缩放设置一致尺寸,目标尺寸path = './images'path_new = './images_new'if not os.path.exists(path_new):os.makedirs(path_new)filelists = []imglist = []for i in os.listdir(path):file_path = os.path.join(path, i)print(file_path)img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), cv2.IMREAD_COLOR)size = img.shapeh, w = size[0], size[1]target_h, target_w = target_size[1], target_size[0]# 确定缩放的尺寸scale_h, scale_w = float(h / target_h), float(w / target_w)print(f'scale_h:{scale_h}, scale_w:{scale_w}')scale = max(scale_h, scale_w) # 选择最大的缩放比率new_w, new_h = int(w / scale), int(h / scale)# 缩放后其中一条边和目标尺寸一致resize_img = cv2.resize(img, (new_w, new_h))# 图像上、下、左、右边界分别需要扩充的像素数目top = int((target_h - new_h) / 2)bottom = target_h - new_h - topleft = int((target_w - new_w) / 2)right = target_w - new_w - leftprint(f'top:{top} bottom:{bottom} left:{left} right:{right}') cv2.imwrite(os.path.join(path_new, f'new_{i}'), resize_img) # 写入本地文件# 填充至 target_w * target_hpad_img = cv2.copyMakeBorder(resize_img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[0, 0, 0])# cv2.imshow('img', pad_img)# cv2.waitKey(1000)filelists.append(os.path.join(path_new, f'new_{i}'))imglist.append(pad_img)return filelists, imglistdef cut_img(scale):path = './images'path_new = './images_new'if not os.path.exists(path_new):os.makedirs(path_new)filelists = []imglist = []for i in os.listdir(path):file_path = os.path.join(path, i)print(file_path)img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), cv2.IMREAD_COLOR)size = img.shapeh, w = size[0], size[1]rate1 = scale.split(':')w1 = int((w - w * int(rate1[0]) / int(rate1[1])) / 2)w2 = int(w - (w - w * int(rate1[0]) / int(rate1[1])) / 2)resize_img = img[0:h, w1:w2]cv2.imwrite(os.path.join(path_new, f'new_{i}'), resize_img) # 写入本地文件filelists.append(os.path.join(path_new, f'new_{i}'))imglist.append(resize_img)return filelists, imglistdef image_to_video():scale = '1:1'  # 裁剪比例,并保持高度不变# scale = '3:4'# scale = '9:16'filelists, imglist = cut_img(scale) # 裁剪# filelists, imglist = resize_img() # 缩放fourcc = cv2.VideoWriter.fourcc(*'mp4v')im = cv2.imread(filelists[0])print(im.shape)shape1 = (im.shape[1], im.shape[0])    #需要转为视频的图片的尺寸, 视频的分辨率print('shape1:', shape1)fps = 1writer = cv2.VideoWriter('./output.mp4', fourcc, fps , shape1)# for file_path in filelists:#     print(file_path)#     img = cv2.imread(file_path)#     writer.write(img)for i in imglist:writer.write(i)writer.release()image_to_video()

 我们无法打开output3.mp4。这可能是因为文件类型不受支
持、文件扩展名不正确或文件已损坏,0xC00D36C4

如果生成的视频报这个错,一般是视频的分辨率 设置的不匹配

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/294028.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【String str = new String(“hollis“) 创建了几个对象?】

✅典型解析 创建的对象数应该是1个或者2个。 首先要清楚什么是对象? Java是一种面向对象的语言,而Java对象在JVM中的存储也是有一定的结构的,在HotSpot虚机中,存储的形式就是oop-klass model,即ava对象模型。我们在Java代码中&am…

as安装后第一次创建项目,出现gradle下载错误,或无法创建run/debug的启动

大概报错Could not resolve com.android.tools.build:gradle:8.0.1 原因两种第一种就是刚创建好后没有等待他自动下载完成就做了其他操作导致异常,第二组就是瞎几把乱改改错了 我就属于第二种 修改回来的方式: 就这个地方我改成了jdk1.8,然…

Docker 编译OpenHarmony 4.0 release

一、背景介绍 1.1、环境配置 编译环境:Ubuntu 20.04OpenHarmony版本:4.0 release平台设备:RK3568 OpenHarmony 3.2更新至OpenHarmony 4.0后,公司服务器无法编译通过,总是在最后几十个文件时报错,错误码4000&#xf…

Qt制作定时关机小程序

文章目录 完成效果图ui界面ui样图 main函数窗口文件头文件cpp文件 引言 一般定时关机采用命令行模式&#xff0c;还需要我们计算在多久后关机&#xff0c;我们可以做一个小程序来定时关机 完成效果图 ui界面 <?xml version"1.0" encoding"UTF-8"?>…

初识Stable Diffusion

界面选项解读 这是在趋动云上部署的Stable Diffusion txt2img prompt &#xff08;1&#xff09;分割符号&#xff1a;使用逗号 , 用于分割词缀&#xff0c;且有一定权重排序功能&#xff0c;逗号前权重高&#xff0c;逗号后权重低 &#xff08;2&#xff09;建议的通用范式…

EDAS 让 Spring Cloud Gateway 生产可用的二三策

作者&#xff1a;kirito Spring Cloud Gateway 是 Spring Cloud 微服务生态下的网关组件&#xff0c;一直以来备受 Java 社区的用户关注&#xff0c;很多企业选择使用其作为微服务网关或者业务网关。在阿里云上&#xff0c;也不乏有很多网关类型的产品供用户使用&#xff0c;例…

【第七在线】数据分析与人工智能在商品计划中的应用

随着技术的不断进步&#xff0c;数据分析和人工智能&#xff08;AI&#xff09;已经成为了现代商品计划的关键组成部分。在服装行业&#xff0c;这两项技术正在帮助企业更好地理解市场需求、优化库存管理、提高生产效率和提供更好的客户体验。本文将深入探讨数据分析和人工智能…

electron使用electron-builder进行MacOS的 打包、签名、公证、上架、自动更新

一、前言 由于electron在macOS下的坑太多&#xff0c;本文不可能把所有的问题都列出来&#xff0c;也不可能把所有的解决方案贴出来&#xff1b;本文也不太会讲解每一个配置点为什么要这么设置的原因&#xff0c;因为有些点我也说不清&#xff0c;我尽可能会说明的。所以&…

Apache Flink 进阶教程(六):Flink 作业执行深度解析

目录 前言 Flink 四层转化流程 Program 到 StreamGraph 的转化 StreamGraph 到 JobGraph 的转化 为什么要为每个 operator 生成 hash 值&#xff1f; 每个 operator 是怎样生成 hash 值的&#xff1f; JobGraph 到 ExexcutionGraph 以及物理执行计划 Flink Job 执行流程…

基于博弈树的开源五子棋AI教程[4 静态棋盘评估]

引子 静态棋盘的评估是棋力的一个很重要的体现&#xff0c;一个优秀的基于博弈树搜索的AI往往有上千行工作量&#xff0c;本文没有做深入讨论&#xff0c;仅仅写了个引子用来抛砖引玉。 评估一般从两个角度入手&#xff0c;一个是子力&#xff0c;另一个是局势。 1 评估维度 …

《工具箱-SVN》SVN安装、备份、迁移教程

文章目录 一、服务器搭建SVN1.检查SVN是否存在2.安装SVN3.创建版本库4.创建版本库存放文件地址5.修改配置文件5.1 vim authz5.2 vim passwd5.3 vim svnserve.conf 6.启动并查看SVN7.SVN Checkout8.SVN Update9.SVN Commit 二、SVN-无法连接主机&#xff0c;目标计算机积极拒绝&…

使用Docker-镜像命令

镜像名称一般分两部分组成:[repository]:[tag] 在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像 目录 案例一&#xff1a;从DockerHub中拉取一个nginx镜像并查看 1.1. 首先去镜像仓库搜索nginx镜像&#xff0c;比如DockerHub ​编辑 1.2.操作拉取n…