blender导出相机参数

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

blender导出相机参数

1.单张照片

python 复制代码
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.多张照片(视频)

python 复制代码
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)
python 复制代码
numpy.load('matrices.npy')

3.坐标系转换

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

python 复制代码
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)
相关推荐
成都渲染101云渲染66663 小时前
《无机杀手》制作团队选择Blender的原因分析
blender
AllBlue3 小时前
blender解决缩放到某个距离就不能继续缩放
blender
小彭努力中7 天前
49. 建模软件绘制3D场景(Blender)
前端·3d·blender·webgl
成都渲染101云渲染666612 天前
Blender软件三大渲染器Eevee、Cycles、Workbench对比解析
blender
穷人小水滴12 天前
修复 blender 中文输入 BUG (linux/wayland/GNOME/ibus)
linux·c++·开源·bug·blender·wayland·ibus
爱看书的小沐13 天前
【小沐学GIS】blender导入OpenStreetMap城市建筑(blender-osm、blosm)
python·gis·blender·openstreetmap·osm·blosm·blender-osm
gzroy21 天前
用Blender来烘培模型材质
3d·blender·材质
成都渲染101云渲染666621 天前
blender云渲染来了,blender云渲染教程!
blender
成都渲染101云渲染666622 天前
Blender渲染太慢怎么办?blender云渲染已开启
blender
zh路西法24 天前
基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模
数码相机·ue5·blender