罗技 Brio OpenCV 捕获设置

cal*_*ben 4 opencv

我正在尝试以 60fps 的速度从 Logitech Brio 录制,最好是 1080p。它应该可以工作,因为我可以让它在 OBS 上工作,而许多其他人已经实现了设置。

这是我用来尝试以这种速率捕获的代码:

    // Do some grabbing
    cv::VideoCapture video_capture;
    video_capture.set(cv::CAP_PROP_FRAME_WIDTH, 1920);
    video_capture.set(cv::CAP_PROP_FRAME_HEIGHT, 1080);
    video_capture.set(cv::CAP_PROP_FPS, 60);
    {
        INFO_STREAM("Attempting to capture from device: " << device);
        video_capture = cv::VideoCapture(device);

        // Read a first frame often empty in camera
        cv::Mat captured_image;
        video_capture >> captured_image;
    }

    if (!video_capture.isOpened())
    {
        FATAL_STREAM("Failed to open video source");
        return 1;
    }
    else INFO_STREAM("Device or file opened");

    cv::Mat captured_image;
    video_capture >> captured_image;
Run Code Online (Sandbox Code Playgroud)

我应该为 Brio 做些什么不同的事情?

ffa*_*our 5

我遇到了同样的问题:相同的相机,无法更改分辨率或 fps 。经过数小时的工作和挖掘互联网,我找到了一个解决方案:需要使用 DSHOW 并且需要从捕获设备 1(而不是 0)读取。以下代码供参考

fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
cap = cv2.VideoCapture()
cap.open(cameraNumber + 1 + cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FOURCC, fourcc)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FPS, 60)
Run Code Online (Sandbox Code Playgroud)

对不起,我只在 Python 中做了这个,但我希望同样的解决方案在 C++ 中也能工作我假设你可以做一些类似的事情

video_capture = cv::VideoCapture(device + 1 + cv::CAP_DSHOW);
Run Code Online (Sandbox Code Playgroud)


Max*_*zak 2

我认为这个问题与相机无关。该代码可能不起作用,因为您正在创建一个单独的范围来打开视频捕获。退出该范围后,将调用 video_capture 实例的析构函数,因此 !isOpened() 检查将始终返回 true。我不明白你为什么要使用这些牙套。相反,它应该是:

    INFO_STREAM("Attempting to capture from device: " << device);
    auto video_capture = cv::VideoCapture(device);
    if (!video_capture.isOpened())
    {
        FATAL_STREAM("Failed to open video source");
        return 1;
    }

    cv::Mat captured_image;
    video_capture.set(cv::CAP_PROP_FRAME_WIDTH, 1920);
    video_capture.set(cv::CAP_PROP_FRAME_HEIGHT, 1080);
    video_capture.set(cv::CAP_PROP_FPS, 60);

    INFO_STREAM("Device or file opened");
    video_capture >> captured_image;
Run Code Online (Sandbox Code Playgroud)