我在python中编写了一些简单的代码,从OpenNI设备中获取不同的通道。我自己构建了OpenCV,并启用了所有PrimeSense和OpenNI支持。OpenNI样本适用于Kinect传感器和PrimeSense传感器,以及用于测试OpenNI支持的OpenCV样本(./cpp-extample-openi_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 上运行
谢谢你的帮助。Drew
检索如下(http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-检索):
Python:cv2.VideoCapture.reveive([image[,channel]])→retval,图像
因此,您需要传递两个值来检索。
我不确定应该是什么图像,但发送一个占位符似乎就可以了
okay1,depth_map=捕获检索(0,cv.cv_CAP_OPENNI_depth_map)
okay2,gray_image=捕获。检索(0,cv_CAP_OPENNI_gray_image)