gpt4 book ai didi

c++ - 从 OpenCV 3 切换到 OpenCV 4 会导致网络摄像头以最高 5 fps 的速度录制,而不是通常的 30 fps

转载 作者:行者123 更新时间:2023-12-01 13:08:20 39 4
gpt4 key购买 nike

自从我在 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;
}

编辑:除了在 OpenCV 4.3 似乎可以工作的 Macbook Pro(但运行相同的发行版)中,其他计算机的更多测试产生相同的结果。其他 2 台计算机是带有 USB 网络摄像头的台式机。

编辑 2:与从源代码构建的 3.4 版相同的问题。目前,只有来自 repo 的 3.2 在两台带有 usbcam 的计算机上工作正常。

最佳答案

这是一个 known bug影响 OpenCV > 3.3

关于c++ - 从 OpenCV 3 切换到 OpenCV 4 会导致网络摄像头以最高 5 fps 的速度录制,而不是通常的 30 fps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62130989/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com