2015-12-14 14 views
5

私は、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% 
+0

はあなたがhttp://answers.opencv.org/question/72386/how-to-get-fps-in-opencv-liveでコードをテストすることができることを保証するものではありません - 差があれば教えてください。 – sturkmen

+0

お返事ありがとうございます。あなたのリンクで両方の例を試してみると、私は平均15fpsに達することができました。 – MSTTm

+0

デバッグモードを実行する場合は、リリースモードを試してください。 – sturkmen

答えて

3

waitkeyは、(1)あなたが鈍化しています。たとえば、10回目の反復のように、それぞれにしようとすることができます。 http://answers.opencv.org/question/52774/waitkey1-timing-issues-causing-frame-rate-slow-down-fix/

FPSの計算方法はかなり悪いです。
double time_elapsed = (finish - start)/CLOCKS_PER_SEC; を試してみてくださいCLOCKS_PER_SECの== 1000年

+0

'waitKey(1)'は1msだけ遅くする必要があります。ウェブカメラのフレーム作成速度が遅いことが考えられます。安価なウェブカメラでは珍しいことではない – mirosval

+0

実際には、ウィンドウが受信するすべてのメッセージを送出するので、少なくとも* 1msかかる。 –

+0

もちろん、18 FPSの場合でも、各フレームを処理するのに55ミリ秒あります。 30FPSではまだ33msなので、もしwaitKey(1)の1〜5msが問題でなければ私は思っています。あなたはまだウェブカメラを待って終わる。 – mirosval

関連する問題