私は、Webカメラからフレームを抽出する必要があるC++とOpenCVを使用してリアルタイム画像解析プロジェクトを開発してきました。私は何らかのスピードでこれらのフレームを抽出しようとすると問題に遭遇しています。現在は約18fpsしか管理できません。ウェブカメラからのフレームの高速抽出:C++とOpenCVとMatlab
#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よりもフレームが速く抽出することができません:ここで私はウェブカメラからフレームを抽出するために使用している単純なコードです。
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);
私はまた私のC++のプロジェクトをスピードアップし、するMEXファイルを使用して見てきた:(次のコードを使用して)50 fpsで - 私は40のMATLABで実現することができるものと類似の速度に到達するために望んでいますGPU/CUDAサポートを有効にしていますが、ハードウェアの問題が発生しましたので、現在のコードでは簡単なアプローチや欠落があるかどうかを確認していました。
ありがとうございます!私は、コードのパフォーマンス分析を実行し、いくつかの粘着性の点、すなわちあります
EDIT:
VideoCapture cap(0); 10.5%
cap >> frame; 36.8%
imshow("video", frame); 31.6%
はあなたがhttp://answers.opencv.org/question/72386/how-to-get-fps-in-opencv-liveでコードをテストすることができることを保証するものではありません - 差があれば教えてください。 – sturkmen
お返事ありがとうございます。あなたのリンクで両方の例を試してみると、私は平均15fpsに達することができました。 – MSTTm
デバッグモードを実行する場合は、リリースモードを試してください。 – sturkmen