2012年8月20日月曜日

OpenCVで、fpsのレートを画面に表示させた


PS3のEyeCameraが60fpsで画像を取り込めるか調べるために、画面にfpsの値を表示させるコードを作成した。

以下にソースを示す。表示するコードの量を減らすために。ヘッダーやライブラリの宣言を省き、エラー処理も省いている

int _tmain(int argc, _TCHAR* argv[])
{
 cv::VideoCapture mCap;     // camera device
 cv::Mat mat;

 int cnt = 0;    // frame数
 int oldcnt = 0;    // 前フレーム数
 int64 nowTime = 0;   // 現時刻
 int64 diffTime = 0;   // 経過時間

 int fps = 0;    // 1秒のフレーム数
 const double f = (1000 /cv::getTickFrequency());

 mCap.open(0);
 mCap.set(CV_CAP_PROP_FPS, 60);
 mCap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
 mCap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);

 cv::Point point(2,28);

 int64 startTime = cv::getTickCount();
 while(1) {
  mCap >> mat;

  nowTime = cv::getTickCount();  
  diffTime = (int)((nowTime- startTime)*f);

  if (diffTime >= 1000) {
   startTime = nowTime;
   fps = cnt - oldcnt;
   oldcnt = cnt;
  }

  std::ostringstream os;
  os << fps;
  std::string number = os.str();

  cv::putText(mat, number, point, cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0,0,200), 2, CV_AA);

  cv::imshow("image", mat);

  int key = cv::waitKey(10);

  if (key == 'q') {
   break;
  }
  cnt++;
 }

 return 0;
}

手持ちのカメラで調べてみたら、26fpsしかでないものもいた。
あとで、EyeCameraも試してみる

Syntax Highlighterとの相性が悪いので、乗り換えを考える。

22日補足
時間の条件式に等号が抜けていたので修正

0 件のコメント:

コメントを投稿