1

我在 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 上运行

感谢您的帮助。德鲁

4

1 回答 1

2

检索看起来像这样(http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-retrieve):

Python: cv2.VideoCapture.retrieve([ image [, channel]]) → retval, image

因此,您需要传递两个值来检索。

我不确定应该是什么图像,但发送占位符似乎可以解决问题。


好的1,depth_map = capture.retrieve(0,cv.CV_CAP_OPENNI_DEPTH_MAP)
好的2,gray_image = capture.retrieve(0,cv.CV_CAP_OPENNI_GRAY_IMAGE)

于 2014-07-14T17:49:33.213 回答