我有一个立体相机,它使用UVC标准以以下格式输出相机的图像。 摄像头设备为OVRvision PRO
使用USB电缆将相机直接连接到PC,并使用opencv(python)中的VideoCapture类获取视频流
我从docs那里得到的信息是,每个像素,像素的16位数据都以左眼的方式传输,高8位是作为左眼传输的,而较低的8位是以右眼的方式传输。
我在框架中得到的dtype是uint8
我不确定如何继续将视频捕获中的每个像素分开。我将不胜感激。
答案 0 :(得分:0)
cv2.VideoCapture
将返回numpy数组,因此,如果它们为16位,则它们的数据类型应为np.uint16
。
在这种情况下,解决方案很简单:做与拆分单个16bit值相同的操作。 Numpy提供所有必要运算符的向量化版本。
右:
投射到np.uint8
(丢弃高位)
right = np.uint8(frame)
左:
投射到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)