1

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で実行

助けてくれてありがとう。ドリュー

4

1 に答える 1

2

取得は次のようになります ( http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-retrieve ):

Python: cv2.VideoCapture.retrieve([画像[, チャネル]]) → retval, 画像

したがって、取得するには 2 つの値を渡す必要があります。

どのような画像になるかはわかりませんが、プレースホルダーを送信するとうまくいくようです。


OK1, depth_map = capture.retrieve( 0 , cv.CV_CAP_OPENNI_DEPTH_MAP)
OK2, gray_image = capture.retrieve( 0 , cv.CV_CAP_OPENNI_GRAY_IMAGE)

于 2014-07-14T17:49:33.213 に答える