首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在pyBullet中从摄像机中获取深度图像

如何在pyBullet中从摄像机中获取深度图像
EN

Stack Overflow用户
提问于 2022-02-02 12:29:42
回答 1查看 602关注 0票数 1

在pyBullet中,我在生成数据集方面遇到了一些困难。我想要实现的是获取相机所看到的图像:img = p.getCameraImage(224, 224, renderer=p.ER_BULLET_HARDWARE_OPENGL)

基本上:获取在合成相机RGB数据和合成相机深度数据(特别是这个)中看到的图像,这是您可以在左边的以下图片中看到的摄像机窗口。

代码语言:javascript
运行
复制
        p.resetDebugVisualizerCamera(cameraDistance=0.5, cameraYaw=yaw, cameraPitch=pitch, cameraTargetPosition=[center_x, center_y, 0.785])
        img = p.getCameraImage(224, 224, renderer=p.ER_BULLET_HARDWARE_OPENGL)
        rgbBuffer = img[2]
        depthBuffer = img[3]
        list_of_rgbs.append(rgbBuffer)
        list_of_depths.append(depthBuffer)

        rgbim = Image.fromarray(rgbBuffer)
        depim = Image.fromarray(depthBuffer)

        rgbim.save('test_img/rgbtest'+str(counter)+'.jpg')
        depim.save('test_img/depth'+str(counter)+'.tiff')

       
        counter += 1

我已经运行了以下程序,所以我不知道它是否与设置相关。p.configureDebugVisualizer(p.COV_ENABLE_DEPTH_BUFFER_PREVIEW, 1)

我尝试过几种方法,因为深度部分很复杂。我不明白它是否需要单独处理,因为像素颜色信息,或者我是否需要与project matrixesview matrixes工作。我需要将它保存为.tiff,因为我得到了一些cannot save F to png错误。我试着玩了一点信息,但什么也没得到。万一你问我,

代码语言:javascript
运行
复制
# depthBuffer[depthBuffer > 65535] = 65535
# im_uint16 = np.round(depthBuffer).astype(np.uint16)
# depthBuffer = im_uint16 

下面是.tiff映像的一个示例

最后,请注意,这些深度图像不断变化(查看所有这些图像,然后转到RGB,再转到深度图像,显示不同的图像,而不管是同一图像。)我以前从没见过这样的事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-27 06:31:07

我想“我一段时间前就解决了这个问题,不如把答案贴出来”。

必须考虑到img的数据结构!

代码语言:javascript
运行
复制
    img = p.getCameraImage(224, 224, shadow = False, renderer=p.ER_BULLET_HARDWARE_OPENGL)
    rgb_opengl = (np.reshape(img[2], (IMG_SIZE, IMG_SIZE, 4)))
    depth_buffer_opengl = np.reshape(img[3], [IMG_SIZE, IMG_SIZE])
    depth_opengl = far * near / (far - (far - near) * depth_buffer_opengl)
    seg_opengl = np.reshape(img[4], [IMG_SIZE, IMG_SIZE]) * 1. / 255.

    rgbim = Image.fromarray(rgb_opengl)
    rgbim_no_alpha = rgbim.convert('RGB')

    rgbim_no_alpha.save('dataset/'+obj_name+'/'+ obj_name +'_rgb_'+str(counter)+'.jpg')
    # plt.imshow(depth_buffer_opengl)
    plt.imsave('dataset/'+obj_name+'/'+ obj_name+'_depth_'+str(counter)+'.jpg', depth_buffer_opengl)
    # plt.show()

最后图片:

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

https://stackoverflow.com/questions/70955660

复制
相关文章

相似问题

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