1

我正在使用带有 python 绑定的 openkinect 并运行以下演示应用程序...

   #!/usr/bin/env python
   import freenect
   import cv
   import frame_convert

   cv.NamedWindow('Depth')
   cv.NamedWindow('Video')
   print('Press ESC in window to stop')


   def get_depth():
       return frame_convert.pretty_depth_cv(freenect.sync_get_depth()[0])


   def get_video():
       return frame_convert.video_cv(freenect.sync_get_video()[0])


   while 1:
       cv.ShowImage('Depth', get_depth())
       cv.ShowImage('Video', get_video())
       if cv.WaitKey(10) == 27:
           break

当我按下退出时,这个程序不会停止。所以我尝试按如下方式执行它

   #!/usr/bin/env python
   import freenect
   import cv
   import frame_convert

   cv.NamedWindow('Depth')
   cv.NamedWindow('Video')
   print('Press ESC in window to stop')


   def get_depth():
       return frame_convert.pretty_depth_cv(freenect.sync_get_depth()[0])


   def get_video():
       return frame_convert.video_cv(freenect.sync_get_video()[0])


   for i in range(10):
       cv.ShowImage('Depth', get_depth())
       cv.ShowImage('Video', get_video())
       if cv.WaitKey(10) == 27:
           break

只执行 10 次。

问题是程序永远不会停止并继续显示图像。我认为需要停止 kinect。

我想在特定的时间实例拍摄深度图像。所以这意味着必须重新启动kinect。我不能让它一直执行。

任何人都可以帮助我吗?

4

3 回答 3

1

无需停止 Kinect:似乎永远不会满足中断 while 的条件。这可能取决于平台、opencv 版本和其他几个因素。尝试类似:

while 1:
       cv.ShowImage('Depth', get_depth())
       cv.ShowImage('Video', get_video())
       k = cv.WaitKey(10) # k contains integer keycode
       if chr(k) == 'q': # press q to exit
           break

要仔细检查为什么按 ESC 键没有传递键码 27 以cv.WaitKey尝试打印k上面的键码并查看按 ESC 时会发生什么。

于 2012-03-26T21:41:54.497 回答
0

使用 'q' 的 int 值而不是 'q'

于 2014-02-06T20:08:55.763 回答
0
k=0
while k != 1048689:   # key value of 'q' is 1048689
    cv.ShowImage('Depth', get_depth())
    cv.ShowImage('Video', get_video())
    k = cv.WaitKey(10) # k contains integer keycode
于 2014-09-14T00:20:55.357 回答