从 OpenCV 3 切换到 OpenCV 4 会导致网络摄像头以最大 5 fps 而不是通常的 30 fps 记录
Switching from OpenCV 3 to OpenCV 4 causes webcam to record at a max of 5 fps instead the usual 30 fps
我在 C++ 项目中从 OpenCV 3.x 更改为 4.x(从源代码编译)后遇到了一些麻烦。我在一个只打开网络摄像头并记录 5 秒的小示例中复制了此行为。
使用 3.x 我可以将网络摄像头帧速率设置为全高清 30,但是使用 4.x 的相同代码只是忽略了 camera.set(cv::CAP_PROP_FPS,30)
并将其设置为 5。如果我使用 720p,则 fps 设置为 10。
也许代码在这里不相关,因为它是一个经典示例,但为了以防万一,我将其留在此处。
#include "opencv2/opencv.hpp"
#include "iostream"
#include "thread"
#include <unistd.h>
using namespace cv;
VideoCapture camera(0);
bool stop = false;
int fc = 0;
void saveFrames()
{
while(!stop)
{
Mat frame;
camera >> frame;
cv::imwrite("/tmp/frames/frame" + std::to_string(fc) + ".jpg", frame);
fc++;
}
}
int main()
{
if(!camera.isOpened())
return -1;
camera.set(cv::CAP_PROP_FRAME_WIDTH,1920);
camera.set(cv::CAP_PROP_FRAME_HEIGHT,1080);
camera.set(cv::CAP_PROP_FPS,30);
double fps = camera.get(cv::CAP_PROP_FPS);
std::cout << "FPS setting: " << fps << std::endl; // 5 with OCV4, 30 with OCV3
std::thread tr(saveFrames);
int waitSeconds = 5;
usleep(waitSeconds * 1e6);
stop = true;
tr.join();
std::cout << "Written " << fc << " frames of " << fps * waitSeconds << std::endl;
return 0;
}
编辑:在 Macbook Pro(但 运行 相同的发行版)中 OpenCV 4.3 似乎可以工作的情况下,使用其他计算机进行的更多测试会产生相同的结果。其他2台电脑是带usb网络摄像头的台式机。
编辑 2:从源代码构建的 3.4 版存在同样的问题。目前,repo 中只有 3.2 在带有 usbcams 的两台计算机上工作正常。
这是一个影响 OpenCV > 3.3
的 known bug
我在 C++ 项目中从 OpenCV 3.x 更改为 4.x(从源代码编译)后遇到了一些麻烦。我在一个只打开网络摄像头并记录 5 秒的小示例中复制了此行为。
使用 3.x 我可以将网络摄像头帧速率设置为全高清 30,但是使用 4.x 的相同代码只是忽略了 camera.set(cv::CAP_PROP_FPS,30)
并将其设置为 5。如果我使用 720p,则 fps 设置为 10。
也许代码在这里不相关,因为它是一个经典示例,但为了以防万一,我将其留在此处。
#include "opencv2/opencv.hpp"
#include "iostream"
#include "thread"
#include <unistd.h>
using namespace cv;
VideoCapture camera(0);
bool stop = false;
int fc = 0;
void saveFrames()
{
while(!stop)
{
Mat frame;
camera >> frame;
cv::imwrite("/tmp/frames/frame" + std::to_string(fc) + ".jpg", frame);
fc++;
}
}
int main()
{
if(!camera.isOpened())
return -1;
camera.set(cv::CAP_PROP_FRAME_WIDTH,1920);
camera.set(cv::CAP_PROP_FRAME_HEIGHT,1080);
camera.set(cv::CAP_PROP_FPS,30);
double fps = camera.get(cv::CAP_PROP_FPS);
std::cout << "FPS setting: " << fps << std::endl; // 5 with OCV4, 30 with OCV3
std::thread tr(saveFrames);
int waitSeconds = 5;
usleep(waitSeconds * 1e6);
stop = true;
tr.join();
std::cout << "Written " << fc << " frames of " << fps * waitSeconds << std::endl;
return 0;
}
编辑:在 Macbook Pro(但 运行 相同的发行版)中 OpenCV 4.3 似乎可以工作的情况下,使用其他计算机进行的更多测试会产生相同的结果。其他2台电脑是带usb网络摄像头的台式机。
编辑 2:从源代码构建的 3.4 版存在同样的问题。目前,repo 中只有 3.2 在带有 usbcams 的两台计算机上工作正常。
这是一个影响 OpenCV > 3.3
的 known bug