gpt4 book ai didi

c++ - OpenCV:帧率差的限制是什么?

转载 作者:行者123 更新时间:2023-11-28 07:43:43 24 4
gpt4 key购买 nike

在带有 PS3-Eye 摄像头的 Ubuntu 12.10 上使用 OpenCV 2.4.3.2 我无法捕获超过每秒约 60 帧 (FPS)。相机本身可提供高达 125 FPS 的帧率。我想知道是什么限制了 OpenCV 中的帧率。所以这是我到目前为止所做的:

#include <sys/time.h>
#include <time.h>
#include <iostream> // for standard I/O

using cv;
using std;

long time_diff( const timespec &t1, const timespec &t2 ) {
return (long)(t2.tv_sec-t1.tv_sec)*1000000000 + (t2.tv_nsec-t1.tv_nsec);
}

int main(int argc, char *argv[]) {
VideoCapture cap(0); // open the default camera
cap.set(CV_CAP_PROP_EXPOSURE, 0);
cap.set(CV_CAP_PROP_FPS, 125);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat frame;
timespec t_start, t_end;
for(int i=1;;++i) {
cap >> frame;
clock_gettime(CLOCK_REALTIME, &t_end);
if( i%20==0 )
std::cout << "FPS ~= " << time_diff(t_start, t_end) << std::endl;
clock_gettime(CLOCK_REALTIME, &t_start);
}
}

这会将每 20 帧的帧率输出到标准输出。请注意,我必须修补源代码才能为 PS3-Eye 相机正确设置帧率。

首先,我将帧速率设置为 30 (cap.set(CV_CAP_PROP_FPS, 30);) 以验证我的测量是否正确。然后使用更高的帧率,报告的帧率上限为 ~60 FPS

USB 不是问题,因为我可以使用 guvcview 获得完整的 120 FPS。

我修改了上面的代码以像这样使用grab()retrieve():

clock_gettime(ClOCK_REALTIME, &t_start);
cap->grab();
clock_gettime(ClOCK_REALTIME, &t_end);
cap->retrieve(frame);

但帧率再次限制在 ~60 FPS

那么我怎么知道是什么限制了帧率?

最佳答案

切换到台式机(从笔记本电脑)后,我能够捕捉到完整的帧率。似乎 OpenCVs 捕获实现不如 guvcview 中的高效。

关于c++ - OpenCV:帧率差的限制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15298792/

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