代码讲解:如何把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,一经查实,立即删除!

相关文章

Java适配器模式源码剖析及使用场景

文章目录 一、适配器模式介绍二、大白话理解三、 项目案例四、Java源码 一、适配器模式介绍 适配器模式(Adapter Pattern)是一种结构型设计模式,它作用于将一个类的接口转换成客户端所期望的另一种接口,从而使原本由于接口不兼容而无法一起工作的那些类可以在一起工作。它属于…

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源码

MIT 6.858 计算机系统安全讲义 2014 秋季(三)

译者:飞龙 协议:CC BY-NC-SA 4.0 SSL/TLS 和 HTTPS **注意:**这些讲座笔记略有修改自 2014 年 6.858 课程网站上发布的笔记。 这节课涉及两个相关主题: 如何在比 Kerberos 更大规模上加密保护网络通信? 技术&#xf…

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…

Pycharm jupyter server process exited with code 1

Pycharm jupyter server process exited with code 1 1. 问题描述2. 原因和解决方法 1. 问题描述 使用 Pycharm 启动 Jupyter 时,报错如下, jupyter server process exited with code 12. 原因和解决方法 Pycharm 启动 jupyter 时,默认的 …

Linux:开源世界的基石

Linux:开源世界的基石 在信息技术的海洋中,Linux像一座灯塔,照亮了开源文化的道路,成为了无数技术爱好者、开发者和企业的选择。作为一个操作系统的内核,Linux的出现犹如一阵清风,打破了操作系统市场的一统…

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

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

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

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

初识C语言—字符串、转义字符、注释

字符串 字符串就是一串字符 用英文双引号括起来的字符 int main() {"dasgfhjkasg\n""hello world!"return 0; } 字符串的结束标志是\0这个转义字符 如何证明呢? int main() {//字符数组 - 数组是一组相同类型的元素char arr[] "hel…

基于注解完成基本类型属性赋值 (DI)

在上一篇文章中,介绍了如何基于注解的方式自动为引用类型的属性赋值,这里介绍如何为基本类型的属性赋值。 为基本类型的属性赋值,使用注解Value。通常用于注入外部数据,或者我们可以直接手动赋值。 步骤如下: 声明外…

【个人开发】llama2部署实践(一)——基于CPU部署

1. Anaconda安装 mkdir -p /opt/anaconda cd /opt/anaconda # 参考链接:https://repo.anaconda.com/archive/index.html wget https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh sh Anaconda3-2023.07-2-Linux-x86_64.sh2.安装git yum inst…

【动态规划】代码随想录算法训练营第四十三天 |1049. 最后一块石头的重量 II,494. 目标和,474.一和零 (待补充)

1049. 最后一块石头的重量 II 1、题目链接:. - 力扣(LeetCode) 2、文章讲解:代码随想录 3、题目: 有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出任意两块石头,然后…

PCB行业IPC标准内容介绍及子标准文件总结

🏡《总目录》 目录 1,概述2,标准内容简介3,IPC标准总结4,总结1,概述 IPC二级标准是针对电路板质量而制定的国际标准。它主要涉及到电路板的设计、制造和检验等方面,旨在确保电路板的质量、可靠性和性能达到一定的标准。 2,标准内容简介 IPC标准主要包括如下四个方面的…

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端框架,功能大同小异,本文就着重比对一下二者的用户案例页面,让老铁们感知一些细节。 一、用户列表 用户列表 用户列表 二、用户编辑 三、用户添加 四、角色管理 五、权限分配 六、角色添加

我曾走在崩溃的边缘:俞敏洪亲述新东方创业发展之路 -- 读书笔记

读完这本书后,启发很大,尤其说的只要坚持做正确的事情,好的结果自然会来。人生就是一场马拉松,起起伏伏很正常,关键是要坚持做正确的事情,从绝望中寻找希望。这本书,是在微信阅读app上阅读的。 …

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

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