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 microsecond

double 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ではミリ秒と訳している様子。一応報告しておくか。

修正された。

対応はぇぇ!!