我正在尝试以 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 做些什么不同的事情?
我遇到了同样的问题:相同的相机,无法更改分辨率或 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)
我认为这个问题与相机无关。该代码可能不起作用,因为您正在创建一个单独的范围来打开视频捕获。退出该范围后,将调用 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)