在pyBullet中,我在生成数据集方面遇到了一些困难。我想要实现的是获取相机所看到的图像:img = p.getCameraImage(224, 224, renderer=p.ER_BULLET_HARDWARE_OPENGL)
基本上:获取在合成相机RGB数据和合成相机深度数据(特别是这个)中看到的图像,这是您可以在左边的以下图片中看到的摄像机窗口。
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 matrixes
和view matrixes
工作。我需要将它保存为.tiff
,因为我得到了一些cannot save F to png
错误。我试着玩了一点信息,但什么也没得到。万一你问我,
# depthBuffer[depthBuffer > 65535] = 65535
# im_uint16 = np.round(depthBuffer).astype(np.uint16)
# depthBuffer = im_uint16
下面是.tiff
映像的一个示例
最后,请注意,这些深度图像不断变化(查看所有这些图像,然后转到RGB,再转到深度图像,显示不同的图像,而不管是同一图像。)我以前从没见过这样的事。
发布于 2022-04-27 06:31:07
我想“我一段时间前就解决了这个问题,不如把答案贴出来”。
必须考虑到img
的数据结构!
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()
最后图片:
https://stackoverflow.com/questions/70955660
复制相似问题