gpt4 book ai didi

c++ - 从网络摄像头快速提取帧 : C++ & OpenCV vs. Matlab

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:33 35 4
gpt4 key购买 nike

我一直在使用 C++ 和 OpenCV 开发一个实时图像分析项目,该项目需要从网络摄像头中提取帧。我在尝试以任何速度提取这些帧时遇到问题 - 目前我只能管理大约 18 fps。这是我用来从网络摄像头中提取帧的简单代码:

#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <ctime>

using namespace std;
using namespace cv;

int main (int argc, char* argv[])
{

VideoCapture cap(0);
if(!cap.isOpened()) return -1;
namedWindow("video", CV_WINDOW_AUTOSIZE);

clock_t start = clock();

for (int i = 0; i < 101; ++i)
{
Mat frame;
cap >> frame;
imshow("video", frame);
waitKey(1);
}

clock_t finish = clock();

double time_elapsed = (finish - start) / 1000.0;
double fps = 100 / time_elapsed;

cout << "\n\nTIME: " << time_elapsed << "\n\nFPS: " << fps << "\n\n";

return 0;
}

我已经尝试过其他代码,但没有一个允许我以超过 18 fps 的速度提取帧。我希望达到与我在 Matlab 中达到的速度相似的 40 - 50 fps(使用以下代码):

vid = videoinput('winvideo', 1, 'MJPG_640x480');
triggerconfig(vid, 'manual');
start(vid);

tic;

for k = 1:100;
clc;
disp(k);
I = peekdata(vid, 1);
imshow(I);
drawnow;
end

toc;

close();
stop(vid);
delete(vid);

我研究过使用 mex 文件来加速我的 C++ 项目并启用 GPU/CUDA 支持,但我遇到了一些硬件问题,所以我想看看是否有更简单的方法或我的方法中缺少的东西当前代码。

提前致谢!

编辑 我刚刚对代码进行了性能分析,有几个棘手的问题:

VideoCapture cap(0);            10.5%
cap >> frame; 36.8%
imshow("video", frame); 31.6%

最佳答案

waitkey(1) 正在减慢您的速度。您可以尝试在每次迭代时执行此操作,例如,第十次迭代。参见 http://answers.opencv.org/question/52774/waitkey1-timing-issues-causing-frame-rate-slow-down-fix/

您计算 FPS 的方法很糟糕。试试
double time_elapsed =(完成 - 开始)/CLOCKS_PER_SEC;不能保证 CLOCKS_PER_SEC == 1000

关于c++ - 从网络摄像头快速提取帧 : C++ & OpenCV vs. Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34260611/

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