当前位置: 首页 > article >正文

blender导出相机参数

前言:在 Blender 的图形化界面中,没有直接的选项可以导出渲染图片的外参矩阵。你可以通过 Python API 来获取并导出相机的外参矩阵。

blender导出相机参数

  • 1.单张照片
  • 2.多张照片(视频)
  • 3.坐标系转换

1.单张照片

import numpy as np   
import bpy
# 获取当前活动相机
cam = bpy.context.scene.camera
# 获取相机的外参矩阵
matrix_world = cam.matrix_world
# 将矩阵转换为 numpy 数组
matrix_np = np.array(matrix_world)
# 保存到文件
np.savetxt('E:\\matrix.txt', matrix_np)

2.多张照片(视频)

import bpy
import numpy as np

# 获取当前场景
scene = bpy.context.scene

# 获取当前活动相机
cam = bpy.context.scene.camera

# 创建一个空的列表来保存所有的矩阵
matrices = []

# 对于场景中的每一帧
for frame in range(scene.frame_start, scene.frame_end + 1):
    # 设置当前帧
    scene.frame_set(frame)
    
    # 获取相机的外参矩阵
    matrix_world = cam.matrix_world
    
    # 将矩阵转换为 numpy 数组并添加到列表中
    matrices.append(np.array(matrix_world))
    
    # 将矩阵转换为 numpy 数组
    matrix_np = np.array(matrix_world)
    
    # 保存到文件,每一帧保存为一个文件
    np.savetxt(f'E:\\briefcase\\matrix_{frame}.txt', matrix_np)

# 将所有的矩阵保存到一个文件中
np.save('E:\\briefcase\\matrices.npy', matrices)

numpy.load('matrices.npy')

3.坐标系转换

在 Blender 中,相机的外参矩阵是以右手坐标系表示的,而 OpenCV 使用的是左手坐标系。

import bpy
import numpy as np

# 获取当前场景
scene = bpy.context.scene

# 获取当前活动相机
cam = bpy.context.scene.camera

# 创建一个空的列表来保存所有的矩阵
matrices = []

# 对于场景中的每一帧
for frame in range(scene.frame_start, scene.frame_end + 1):
    # 设置当前帧
    scene.frame_set(frame)
    
    # 获取相机的外参矩阵
    matrix_world = cam.matrix_world
    
    # 将矩阵转换为 numpy 数组
    matrix_np = np.array(matrix_world)
    
    # 创建一个转换矩阵
    transform = np.array([[1, 0, 0, 0],
                          [0, -1, 0, 0],
                          [0, 0, -1, 0],
                          [0, 0, 0, 1]])
    
    # 将 Blender 的外参矩阵转换为 OpenCV 的坐标系
    matrix_opencv = np.dot(transform, matrix_np)
    
    # 保存到文件,每一帧保存为一个文件
    np.savetxt(f'matrix_{frame}.txt', matrix_opencv)


http://www.kler.cn/a/156003.html

相关文章:

  • 020_Servlet_Mysql学生选课系统(新版)_lwplus87
  • 网络管理之---3种网络模式配置
  • cannot locate symbol _ZTVNSt6__ndk119basic_ostringstreamIcNS_
  • 908. 最小差值 I
  • M1M2 MAC安装windows11 虚拟机的全过程
  • 一文熟悉新版llama.cpp使用并本地部署LLAMA
  • ESP32使用mpu6050以及pid调参
  • Python - 字典3
  • 详解云WAF:免费GOODWAF归来
  • HarmonyOS—ArkTS中@Observed和@ObjectLink装饰器的嵌套类对象属性变化【鸿蒙专栏-11】
  • C语言实现Cohen_Sutherland算法
  • 构造函数的定义
  • Prometheus+Grafana搭建日志采集
  • Langchain-Chatchat的安装过程
  • C++基础 -35- string类
  • 操作系统·存储器管理
  • 亚信科技AntDB数据库完成中国信通院数据库迁移工具专项测试
  • unordered_map与unordered_set的实现(含迭代器)
  • go使用aes加密算法
  • 【ArcGIS Pro微课1000例】0043:深度学习--框架库安装
  • 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(3)路由导航卫士、主页实现
  • Jupyter NoteBook未授权访问漏洞
  • 2024年天津财经大学珠江学院专升本专业课报名缴费操作流程
  • KALI LINUX入门
  • LC-1423. 可获得的最大点数(子数组和、枚举)
  • 牛客在线编程(SQL大厂面试真题)