代码讲解:如何把3D数据转换成旋转的视频?

目录

3D数据集下载

读取binvox文件

使用matplotlib创建图

动画效果

完整代码


3D数据集下载

这里以shapenet数据集为例,可以访问外网的可以去直接申请下载;我也准备了一个备份在百度网盘的数据集,可以参考:

ShapeNet简介和下载、binvox文件python示例-CSDN博客

读取binvox文件

需要先安装binvox_rw:

https://github.com/wangqiang9/binvox_rw/tree/main

git clone git@github.com:wangqiang9/binvox_rw.git
cd binvox_rw
pip install .

然后调用接口读取binvox文件:

    # 读取 .binvox 文件with open(path, "rb") as f:model = binvox_rw.read_as_3d_array(f)

使用matplotlib创建图

   # 转换成 numpy 数组voxels = model.data# 旋转voxels = np.transpose(voxels, (2, 1, 0))voxels = np.transpose(voxels, (0, 2, 1))# 创建一个图和坐标轴fig = plt.figure()ax = fig.add_subplot(111, projection='3d')ax.set_axis_off()# 批量隐藏所有边框线for spine in ax.spines.values():spine.set_visible(False)# 隐藏刻度线ax.tick_params(bottom=False, left=False)# 创建一个可视化的体素图ax.voxels(voxels, edgecolor='k')

动画效果

    # 保存动画rot_animation.save(gif_path, dpi=100, writer='imagemagick')video = VideoFileClip(gif_path)target_duration = video.duration / 3compressed_video = video.fx(vfx.speedx, target_duration)compressed_video.write_videofile(video_path)

完整代码

import numpy as np
import binvox_rw
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import os
from moviepy.editor import *output_path = "/shapenet/video_ratate"
output_gif_path = "/datasets/shapenet/gif_ratate"
folder_path = "/datasets/shapenet/all/ShapeNetVox32/"
subfolders = [f.path for f in os.scandir(folder_path) if f.is_dir()]def func(path, gif_path, video_path):# 读取 .binvox 文件with open(path, "rb") as f:model = binvox_rw.read_as_3d_array(f)# 转换成 numpy 数组voxels = model.data# 旋转voxels = np.transpose(voxels, (2, 1, 0))voxels = np.transpose(voxels, (0, 2, 1))# 创建一个图和坐标轴fig = plt.figure()ax = fig.add_subplot(111, projection='3d')ax.set_axis_off()# 批量隐藏所有边框线for spine in ax.spines.values():spine.set_visible(False)# 隐藏刻度线ax.tick_params(bottom=False, left=False)# 创建一个可视化的体素图ax.voxels(voxels, edgecolor='k')# 保存动画帧函数def rotate(angle):ax.view_init(azim=angle)# 创建动画rot_animation = animation.FuncAnimation(fig, rotate, frames=np.arange(0, 360, 4), interval=0.5)# 保存动画rot_animation.save(gif_path, dpi=100, writer='imagemagick')video = VideoFileClip(gif_path)target_duration = video.duration / 3compressed_video = video.fx(vfx.speedx, target_duration)compressed_video.write_videofile(video_path)plt.show()for subfolder in subfolders:subfolders_1 = [f.path for f in os.scandir(subfolder) if f.is_dir()]for path in subfolders_1:path = os.path.join(path, 'model.binvox')gif_name = path.split('/')[-2] + ".gif"video_name = path.split('/')[-2] + ".mp4"gif_path = os.path.join(output_gif_path, gif_name)video_path = os.path.join(output_path, video_name)func(path, gif_path, video_path)

也可以看我在GitHub上写的案例:

https://github.com/wangqiang9/binvox_rw/blob/main/convert_to_video.py

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

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

相关文章

Vue3中Vue Router的使用区别

在 Vue 3 中,useRouter 和 useRoute 是两个用于 Vue Router 的 Composition API 函数,它们的用途和返回的对象不同,接下来详细了解一下它们的区别以及如何正确使用它们。 useRouter useRouter 用于获取 router 实例,这个实例提供…

macOS14.4安装FFmpeg及编译FFmpeg源码

下载二进制及源码包 二进制 使用brew安装ffmpeg : brew install ffmpeg 成功更新到ffmpeg6.1 下载FFmpeg源码

LVS (Linux Virtual server)集群介绍

一 集群和分布式 (一)系统性能扩展方式: Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务 (即升级单机的硬件设备) Scale Out:水平扩展&#xff0…

Anaconda prompt运行打开jupyter notebook 指令出错解决方案

一、打不开jupyter notebook网页 报错如下: Traceback (most recent call last): File “D:\anaconda3\lib\site-packages\notebook\traittypes.py”, line 235, in _resolve_classes klass self._resolve_string(klass) File “C:\Users\DELL\AppData\Roaming\Py…

单文件组件SFC及Vue CLI脚手架的安装使用

单文件组件SFC及Vue CLI脚手架的安装使用 Vue 单文件组件(又名 *.vue 文件,缩写为 SFC)是一种特殊的文件格式,它允许将 Vue 组件的模板、逻辑 与 样式封装在单个文件中。 为什么要使用 SFC 使用 SFC 必须使用构建工具&#xff…

Vue class和style绑定:动态美化你的组件

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

考研经验|如何从考研失败中走出来?

对我来说,太丢人了 其实我在本科的时候在同学眼中,一直很优秀,每年奖学金必有我的,国家励志奖学金,国家奖学金,这种非常难拿的奖学金,我也拿过,本科期间学校有一个公费去新西兰留学的…

Text Field文本输入框

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Text Field文本输入框 一、最基本的本文输入框1、基础示例2、一些表单属性3、验证 二、多行文本 一、最基本的本文输入框 1、基础示例 import {Box, TextField} from "…

Ele admin pro和iView Admin pro的用户管理页面对比

Ele admin pro和iView Admin pro都是非常优秀的B端框架,功能大同小异,本文就着重比对一下二者的用户案例页面,让老铁们感知一些细节。 一、用户列表 用户列表 用户列表 二、用户编辑 三、用户添加 四、角色管理 五、权限分配 六、角色添加

基于GIS、RS、VORS模型、CCDM模型、geodetecto、GWR模型集成的生态系统健康的耦合协调分析

城市群是一国经济发展水平的象征,也是一国经济发展到一定阶段的标志,我国城市群建设体量不断增加,将成为全球经济的核心,中国城市群的建设逐步引领全球进入到了21世纪的中国新时代。然而,高速的城镇化发展,…

Elastic Stack--07--JavaAPI----文档(新增 、修改 、 查询 、 删除)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 JavaAPI-文档1.新增 Insert2.修改 Update3.查询 Get4.删除 Delete5.批量操作 BulkRequest批量新增批量删除 高级查询1.查询所有索引数据2.条件查询3.分页查询4.查询…

Mysql数据库-基本表操作

1.表操作 创建表:CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; field 表示列名 datatype 表示列的类型 character set 字符集,如果没有指定字符集&#xff…

深入解读 Elasticsearch 磁盘水位设置

本文将带你通过查看 Elasticsearch 源码来了解磁盘使用阈值在达到每个阶段的处理情况。 跳转文章末尾获取答案 环境 本文使用 Macos 系统测试,512M 的磁盘,目前剩余空间还有 60G 左右,所以按照 Elasticsearch 的设定,ES 中分片应…

解决 cx-programmer 梯形图中繁体中文乱码问题

我的情况 cx-programmer9.5是繁体版,梯形图编辑区中打出的字体,简体繁体 都是乱码。 但是状态栏显示注解是正常的繁体。 原因 简体和繁体的编码不一样。繁体的BIG5和简体的GB2312不能互转,A编码的用B解码也是乱码。 解决 把系统字体调整为繁…

picGo 图床配置 - gitee

记录一下,怕忘记了 PicGo 下载安装 官网下载地址 从下面随意复制一个链接到浏览器上打开 我下载的是.exe版本的,你可以选择自己想安装的方式 安装完之后打开就是这个样子 配置PicGo 首先安装这个插件 安装完之后会有一个gitee,点击&#xff…

STM32CubeMX学习笔记18——FSMC(TFT-LCD屏触摸)

1.触摸屏简介 目前最常用的触摸屏有两种:电阻式触摸屏和电容式触摸屏 1.1 电阻式触摸屏 电阻式的触摸屏结构如下图示,它主要由表面硬涂层、两个ITO层、间隔点以及玻璃底层构成,这些结构层都是透明的,整个触摸屏覆盖在液晶面板上…

集合框架(一)Set系列集合

Set<E>是一个接口 特点 无序&#xff1a;添加数据的顺序和获取出的数据顺序不一致&#xff1b;不重复&#xff0c;无索引 注意&#xff1a;Set要用到的常用方法&#xff0c;基本上就是collection提供的!自己几乎没有额外新增一些常用功能! HashSet集合的底层原理 前置知…

denied: requested access to the resource is denied报错解决

Docker 镜像在文件中包含一组指令&#xff0c;可在 Docker 容器中执行代码。大多数情况下&#xff0c;在创建 docker 镜像之后&#xff0c;当尝试将镜像推送到远程仓库时&#xff0c;会发生这种类型的报错“Docker denied: requested access to the resource is denied” 由于错…

RabbitMQ - 07 - 通过注解创建队列和交换机

之前消息模型的实现,都是通过rabbitMQ Management 控制台来手动创建 queue 和 exchange 的 在项目开发中有两种方式通过代码声明 创建 一种是通过 Bean 方式,这种代码量较大 稍繁琐 一种是通过注解的方式声明 先编写消费者代码 通过注解绑定了 消息队列,交换机,还有 routin…

零售EDI:劳氏 Lowe‘s EDI项目案例

通过 EDI&#xff0c;企业与Lowes之间可以直接交换各种商业文档&#xff0c;如订单、发票、收据等&#xff0c;从而实现信息的实时交换&#xff0c;提高了供应链的效率和准确性。在现代供应链管理中&#xff0c;EDI 已经成为了不可或缺的重要工具。 作为一家拥有多条业务线的企…