如何从pyBullet中的相机获取深度图像
How to get depth images from the camera in pyBullet
在 pyBullet 中,我在生成数据集时遇到了一些困难。我想要实现的是获取相机所见的照片:img = p.getCameraImage(224, 224, renderer=p.ER_BULLET_HARDWARE_OPENGL)
基本上:获取在合成相机 RGB 数据和合成相机 深度 数据(尤其是这个)中看到的图像,它们是相机 windows 你可以在下图左边看到。
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 并再次传递到深度图像,无论是同一图像还是显示不同的图像。我从来没有以前见过这样的东西。
我想“我前段时间设法解决了这个问题,不妨 post 找到答案”。
必须考虑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()
最终图片:
在 pyBullet 中,我在生成数据集时遇到了一些困难。我想要实现的是获取相机所见的照片:img = p.getCameraImage(224, 224, renderer=p.ER_BULLET_HARDWARE_OPENGL)
基本上:获取在合成相机 RGB 数据和合成相机 深度 数据(尤其是这个)中看到的图像,它们是相机 windows 你可以在下图左边看到。
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 并再次传递到深度图像,无论是同一图像还是显示不同的图像。我从来没有以前见过这样的东西。
我想“我前段时间设法解决了这个问题,不妨 post 找到答案”。
必须考虑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()
最终图片: