2024-09-28 23:23:48 发布
网友
我目前正在进行一个项目,我需要使用PyKinect库访问和处理深度数据。
我想做的是定义一个深度阈值,在这里我将做一些图像分割,但由于我是PyKinect新手,我仍然不知道在哪里寻找资源,我不知道如何访问这些数据和获取值。
我也试过使用freenect库,但是我不能让它工作。
有谁能告诉我怎么做,或者把我引向某种文档?
我刚刚创建了一个snippet on my BitBucket account来使用PyKinect和Pygame可视化深度图像。代码如下:
import thread import pygame from pykinect import nui DEPTH_WINSIZE = 320,240 screen_lock = thread.allocate() screen = None tmp_s = pygame.Surface(DEPTH_WINSIZE, 0, 16) def depth_frame_ready(frame): with screen_lock: frame.image.copy_bits(tmp_s._pixels_address) arr2d = (pygame.surfarray.pixels2d(tmp_s) >> 7) & 255 pygame.surfarray.blit_array(screen, arr2d) pygame.display.update() def main(): """Initialize and run the game.""" pygame.init() # Initialize PyGame global screen screen = pygame.display.set_mode(DEPTH_WINSIZE, 0, 8) screen.set_palette(tuple([(i, i, i) for i in range(256)])) pygame.display.set_caption('PyKinect Depth Map Example') with nui.Runtime() as kinect: kinect.depth_frame_ready += depth_frame_ready kinect.depth_stream.open(nui.ImageStreamType.Depth, 2, nui.ImageResolution.Resolution320x240, nui.ImageType.Depth) # Main game loop while True: event = pygame.event.wait() if event.type == pygame.QUIT: break if __name__ == '__main__': main()
编辑:上面的代码显示了如何将深度数据转换为8位表示(以便可以轻松地将其绘制为灰度图像)。但是如果你想使用实际的深度数据,你需要知道它们是如何构造的。
使用微软Kinect SDK(PyKinect基于它),一个深度像素由16位组成。三个不那么有意义的代表玩家指数,而我还没有很好地理解最有意义的一个的含义。。。但假设我们需要去掉最后3位和第一位。例如,这是需要对每个像素执行的操作的示例(取自this question):
0 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 - 16 bits number 0 1 1 0 0 0 1 0 0 0 1 1 1 - 13 bits number 1 1 0 0 0 1 0 0 0 1 1 1 - 12 bits number
上面的操作(删除最后3位和第一位)可以通过对arr2d数组执行两个按位操作来实现。因为它是一个NumPy数组,所以您可以如下操作:
arr2d
def depth_frame_ready(frame): frame.image.copy_bits(tmp_s._pixels_address) arr2d = (pygame.surfarray.pixels2d(tmp_s) >> 3) & 4095 # arr2d[x,y] is the actual depth measured in mm at (x,y)
然后,您可能需要显示这些数据,因此您可能需要8位表示。要得到它:
arr2d >>= 4
我刚刚创建了一个snippet on my BitBucket account来使用PyKinect和Pygame可视化深度图像。代码如下:
编辑:上面的代码显示了如何将深度数据转换为8位表示(以便可以轻松地将其绘制为灰度图像)。但是如果你想使用实际的深度数据,你需要知道它们是如何构造的。
使用微软Kinect SDK(PyKinect基于它),一个深度像素由16位组成。三个不那么有意义的代表玩家指数,而我还没有很好地理解最有意义的一个的含义。。。但假设我们需要去掉最后3位和第一位。例如,这是需要对每个像素执行的操作的示例(取自this question):
上面的操作(删除最后3位和第一位)可以通过对
arr2d
数组执行两个按位操作来实现。因为它是一个NumPy数组,所以您可以如下操作:然后,您可能需要显示这些数据,因此您可能需要8位表示。要得到它:
相关问题 更多 >
编程相关推荐