16-битное стерео видеозахватное пиксельное разделение битов - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть стереокамера, которая выводит изображение с камеры в следующем формате, используя стандарт UVC.Устройство камеры - OVRvision PRO

Stereo Video Output. Камера напрямую подключена к ПК с помощью USB-кабеля, и видеопоток получается с помощью класса VideoCapture в opencv (python)

Информация, которую я имеюИз документации видно, что каждый пиксель, верхние 8 битов передаются как левый глаз, а нижние 8 битов передаются как правый глаз 16-битным данным пикселя.

Тип d, который я получаю в кадреis uint8

Я не уверен, что делать с разделением битов для каждого пикселя при захвате видео.Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 29 ноября 2018

cv2.VideoCapture вернет numy массивы, поэтому если они 16-битные, у них должен быть тип данных np.uint16.

В этом случае решение тривиально: сделайте то же самое, что и выразделить одно 16-битное значение.Numpy предоставляет векторизованную версию всех необходимых операторов.

  • Справа:

    • Приведение к np.uint8 (старшие биты отбрасываются)

      right = np.uint8(frame)
      
  • Слева:

    • Сдвиг вправо на 8 бит
    • Приведение к np.uint8

      left = np.uint8(frame >> 8)
      

Если входное изображение было уменьшено до 8-битной глубины, у вас останутся два 16-уровневых изображения.Чтобы получить два компонента, вам просто нужно немного изменить подход ...

Пример в консоли:

>>> a = np.ones((4,4),np.uint8) * 0x73
>>> a & 0xF
array([[3, 3, 3, 3],
       [3, 3, 3, 3],
       [3, 3, 3, 3],
       [3, 3, 3, 3]], dtype=uint8)
>>> a >> 4
array([[7, 7, 7, 7],
       [7, 7, 7, 7],
       [7, 7, 7, 7],
       [7, 7, 7, 7]], dtype=uint8)
...