我在python中组合了一些简单的代码来从OpenNI设备中获取不同的通道。我自己构建了OpenCV,启用了所有PrimeSense和OpenNI支持。 OpenNI样本适用于Kinect传感器和PrimeSense传感器,以及用于测试OpenNI支持的OpenCV样本(./cpp-example-openni_capture)。
这是我放在一起的代码。
import cv2
import cv2.cv as cv
capture = cv2.VideoCapture(cv.CV_CAP_OPENNI)
capture.set(cv.CV_CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE, cv.CV_CAP_OPENNI_VGA_30HZ)
print capture.get(cv.CV_CAP_PROP_OPENNI_REGISTRATION)
while True:
if not capture.grab():
print "Unable to Grab Frames from camera"
break
okay1, depth_map = capture.retrieve(cv.CV_CAP_OPENNI_DEPTH_MAP)
if not okay1:
print "Unable to Retrieve Disparity Map from camera"
break
okay2, gray_image = capture.retrieve(cv.CV_CAP_OPENNI_GRAY_IMAGE)
if not okay2:
print "Unable to retrieve Gray Image from device"
break
cv2.imshow("depth camera", depth_map)
cv2.imshow("rgb camera", gray_image)
if cv2.waitKey(10) == 27:
break
cv2.destroyAllWindows()
capture.release()
所以一切运行正常,但显示的结果不是正确的通道...例如,如果我想访问灰度图像通道和深度图通道,则显示的两个图像都是depth_maps。
是的,我已尝试访问其他频道并更改OPENNI_IMAGE_GENERATOR_MODE。不幸的是,结果保持一致。无论我尝试什么,我总是得到相同的深度通道。 depth_map-gray_image产生全黑图像。
就像我说的那样,C ++ OpenCV OpenNI示例都可以完美地用于Kinect传感器和primesense传感器。这似乎是Python模块的一个问题,或者我正在做一些非常愚蠢的事情。
编辑:在Ubuntu 12.04 LTS上运行
感谢您的帮助。 德鲁
答案 0 :(得分:2)
所以你需要传递两个值来检索。
我不确定应该是什么图像,但发送到占位符似乎可以解决问题。
okay1,depth_map = capture.retrieve( 0 ,cv.CV_CAP_OPENNI_DEPTH_MAP)
okay2,gray_image = capture.retrieve( 0 ,cv.CV_CAP_OPENNI_GRAY_IMAGE)