OpenCVのcvGetTickFrequencyが変
OpenCVのcvGetTickFrequencyが変!な気がする。笑。
MacOSだけかもしれんけど。
cvGetTickCount,cvGetTickFrequency
opencv.jpで調べものをしていたら、
cvGetTickCountとcvGetTickFrequencyなる関数があるのを発見。
時間計測をしてくれるらしい。いつからあったのこんな関数?
GetTickCount
tics数を返すint64 cvGetTickCount( void );
関数 cvGetTickCount は,プラットフォーム依存の開始時点からのtics数(スタートアップからのCPU ticks数,1970年からのミリ秒等)を返す. この関数は,ある関数やユーザコードの実行時間を正確に計測するのに便利である. tics数から時間単位に変換するためには,cvGetTickFrequencyを用いる.
etTickFrequency
1ミリ秒あたりのtics数を返すdouble cvGetTickFrequency( void );
関数 cvGetTickFrequency は,1ミリ秒あたりのtics数を返す. つまり,cvGetTickCount() を cvGetTickFrequency() で割った商が,プラットフォーム依存の開始時刻からのミリ秒単位の時刻になる.
とりあえず、使ってみる。
long long int time1 = cvGetTickCount(); process(); // とある処理。0.1秒以下の予定 long long int time2 = cvGetTickCount(); double msec = (double)(time1-time2)/cvGetTickFrequency(); cout << time1 << endl; // 1214131457632194 cout << time2 << endl; // 1214131457650528 cout << cvGetTickFrequency() << endl; // 1 cout << msec << endl; // 18334
いやいやいや、、cvGetTickFrequency() == 1 !!?
体感的にはcvGetTickFrequency() == 1000 くらいなんだけど、、、
変なのは俺?
Google先生に聞くと、みんなcvGetTickFrequency()で割ったあとに、さらに1000で割ってミリ秒にしてる。
変なのはopencv.jp!!
英語のリファレンス見てきた!!
GetTickFrequency
Returns number of tics per microseconddouble cvGetTickFrequency( void );
The function cvGetTickFrequency returns number of tics per microsecond. Thus, the quotient of cvGetTickCount() and cvGetTickFrequency() will give a number of microseconds starting from the platform-dependent event.
microsecondをopencv.jpではミリ秒と訳している様子。一応報告しておくか。
修正された。
対応はぇぇ!!