Извлечение каналов с устройства Kinect с помощью Python OpenCV

Я собрал в Python простой код для захвата различных каналов с устройств OpenNI. Я сам создал OpenCV со всей поддержкой PrimeSense и OpenNI. Образцы OpenNI отлично работают как для датчика Kinect, так и для датчика PrimeSense, а также для образцов OpenCV для тестирования поддержки OpenNI (./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()

Так что все работает нормально, но отображаемые результаты не являются правильными каналами... Например, если я хотел получить доступ к каналу серого изображения и каналу карты глубины, оба отображаемых изображения - это глубина_карты.

Да, я пытался получить доступ к другим каналам и изменить OPENNI_IMAGE_GENERATOR_MODE. К сожалению, результаты остались неизменными. Независимо от того, что я пытаюсь, я всегда получаю один и тот же канал глубины. Глубина_карты-серого-изображения дает полностью черное изображение.

Как я уже сказал, примеры C++ OpenCV OpenNI отлично работают как для датчика Kinect, так и для датчика Primesense. Это похоже на проблему с модулями Python, или я делаю что-то действительно глупое.

РЕДАКТИРОВАТЬ: работает на Ubuntu 12.04 LTS

Спасибо за помощь. Нарисовалась

1 ответ

Извлечение выглядит следующим образом ( http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html):

Python: cv2.VideoCapture.retrieve ([изображение[, канал]]) → retval, изображение

Таким образом, вам нужно передать два значения для извлечения.

Я не уверен, какое изображение должно быть, но отправка в заполнителе, кажется, добивается цели.


хорошо1, глубина_карта = capture.retrieve (0, cv.CV_CAP_OPENNI_DEPTH_MAP)
хорошо2, grey_image = capture.retrieve (0, cv.CV_CAP_OPENNI_GRAY_IMAGE)

Другие вопросы по тегам