OpenNIデバイスからさまざまなチャネルを取得するために、Pythonで簡単なコードをいくつかまとめました。PrimeSense と OpenNI のすべてのサポートを有効にして、OpenCV を自分で構築しました。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で実行
助けてくれてありがとう。ドリュー