如何从USB 3.0立体相机计算深度信息?

nma*_*nte 4 python opencv stereo-3d openni

我对使用立体相机计算视频/图像深度很感兴趣.该相机是Leopard Imaging的USB 3.0立体相机https://www.leopardimaging.com/LI-USB30-V024STEREO.html.我正在使用MAC OS X顺便说一句.

他们的客户支持告诉我,这是一台"UVC"相机.当连接到苹果电脑时,它会呈现绿色图像.

我的最终目标是使用OpenCV从两个镜头中抓取左右框架,以便我可以计算深度.我熟悉OpenCV,但不熟悉使用立体相机.任何帮助将非常感激.到目前为止,我一直在Python 3中这样做:

import numpy as np
import cv2
import sys
from matplotlib import pyplot as plt

import pdb; pdb.set_trace()
print("Camera 1 capture", file=sys.stderr)
cap = cv2.VideoCapture(1)

print("Entering while", file=sys.stderr)
while(True):
    _ = cap.grab()
    retVal, frame = cap.retrieve()

    #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

这有效,但它只给我一张没有深度的绿色图片/图像.关于如何从相机获取左右帧的任何建议?

Esw*_*war 5

豹子成像人员给我一个线索,但我无法取得进展,因为我猜我的核心文件中有一些丢失的文件.但是,我认为这可能对某人有所帮助.所以我发布它作为答案.该邮件是由我通过邮件联系的一位豹子成像人员发送的.它就像这样......

我们有一位客户在一年前成功地在Linux OS上分离了这两个视频.我试图联系他,看看他是否可以与我们分享源代码.不幸的是,他已经离开了这家前公司,但他仍然发现了一些笔记(下图).希望能帮助到你.

相机将来自两个传感器的图像组合成一个16位像素数据(来自一个相机的高8位,来自另一个相机的低8位).要在linux opencv中解决这个问题,应该通过opencv:at跳过颜色转换

modules/videoio/src/cap_v4l.cpp static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int)

case V4L2_PIX_FMT_YUYV:
#if 1
    /*
    skip color convert. Just copy image buffer to frame.imageData
    */
    memcpy(capture->frame.imageData, capture->buffers[capture->bufferIndex].start, capture->buffers[capture->bufferIndex].length);
#else
    yuyv_to_rgb24(capture->form.fmt.pix.width, capture->form.fmt.pix.height,(unsigned char*) capture->buffers[capture->bufferIndex].start),
            (unsigned char*)capture->frame.imageData);
#endif
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

免责声明:我继续使用libuvc中给出的C++版本(我的项目使用C++),使用提供的例程分别获取左右帧.