0

PS3-Eye カメラを搭載した Ubuntu 12.10 で OpenCV 2.4.3.2 を使用すると、 1 秒あたり最大 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 フレームごとのフレームレートが stdout に出力されます。PS3-Eye カメラのフレームレートを正しく設定できるように、ソースにパッチを適用する必要があったことに注意してください。

まず、フレームレートを 30 ( cap.set(CV_CAP_PROP_FPS, 30);) に設定して、測定値が正しいことを確認します。次に、より高いフレームレートを使用すると、報告されるフレームレートは ~60 FPS に制限されます。

で完全な 120 FPS を取得できるため、USB は問題ではありませんguvcview

上記のコードを使用grab()してretrieve()次のように変更しました。

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

ただし、フレームレートは再び 60 FPS に制限されます。

では、何がフレームレートを制限しているのか、どうすればわかりますか?

4

2 に答える 2

0

OpenCVとDelphi X6を使用したwin7 x64の65 FPS制限で同じ問題があります。発見された問題は、cvWaitKey または Windows メッセージ キューにあり、65 Hz での再描画を制限します。 解決策 - cvWaitKey を呼び出す頻度を減らし、1 秒あたり 65 回未満にします。

于 2014-09-24T06:52:16.267 に答える