首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在pyrender中将场景渲染为图像后获取对象的像素坐标?

如何在pyrender中将场景渲染为图像后获取对象的像素坐标?
EN

Stack Overflow用户
提问于 2020-09-05 20:31:07
回答 1查看 783关注 0票数 1

我正在尝试获取使用pyrender渲染的对象的像素坐标(x,y)。其目的是获得该对象的边界框坐标。我使用OffScreenRenderer来渲染场景。

代码语言:javascript
复制
r = pyrender.OffscreenRenderer(viewport_width=640,
                            viewport_height=480,
                            point_size=1.0)
color, depth = r.render(scene)

可用信息: camera_to_world姿态矩阵

首先,我尝试绘制对象的质心,如下所示:

代码语言:javascript
复制
x, y = trimesh_mesh.centroid[:2]
height, width = image.shape[:2]
x = int(x * width)
y = int(y * height)
plt.imshow(image)
plt.scatter(x, y)
plt.show()

我得到了以下信息:image plot

类似地,同一对象的边界框图是here

有人知道如何获得渲染对象的精确质心和长方体坐标吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-09-25 19:59:55

您正在寻找bpy_extras.object_utils.world_to_camera_view

像这样使用它:

代码语言:javascript
复制
import bpy
import bpy_extras

scene = bpy.context.scene
obj = bpy.context.object   # object you want the coordinates of
vertices = obj.data.vertices   # you will get the coordinates of its vertices

for v in vertices:
    # local to global coordinates
    co = v.co @ obj.matrix_world
    # calculate 2d image coordinates
    co_2d = bpy_extras.object_utils.world_to_camera_view(scene, camera, co)
    render_scale = scene.render.resolution_percentage / 100
    render_size = (
        int(scene.render.resolution_x * render_scale),
        int(scene.render.resolution_y * render_scale),
    )

    # this is the result
    pixel_coords = (co_2d.x * render_size[0],
                    co_2d.y * render_size[1])

    print("Pixel Coords:", (
          round(pixel_coords[0]),
          round(pixel_coords[1]),
    ))

请参阅搅拌机堆栈交换上的this answer

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63753960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档