Извлечение каналов с устройства 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)