16位Stero Video Capture像素明智位分离

时间:2018-11-28 20:26:14

标签: python opencv stereo-3d

我有一个立体相机,它使用UVC标准以以下格式输出相机的图像。 摄像头设备为OVRvision PRO

Stereo Video Output 使用USB电缆将相机直接连接到PC,并使用opencv(python)中的VideoCapture类获取视频流

我从docs那里得到的信息是,每个像素,像素的16位数据都以左眼的方式传输,高8位是作为左眼传输的,而较低的8位是以右眼的方式传输。

我在框架中得到的dtype是uint8

我不确定如何继续将视频捕获中的每个像素分开。我将不胜感激。

1 个答案:

答案 0 :(得分:0)

cv2.VideoCapture将返回numpy数组,因此,如果它们为16位,则它们的数据类型应为np.uint16

在这种情况下,解决方案很简单:做与拆分单个16bit值相同的操作。 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)