2014年12月20日土曜日

OpenCVで処理時間を調べる

以前は、処理時間の計測に
cv::getTickCount()
の差分を使用し処理時間の計算をしていた。

しかし、OpenCV2.4系のUtilityモジュールに計測用のクラス cv::TickMeter が準備されている。
なぜか、ドキュメントには記載されていない。

使用例

cv::TickMeter    tmeter; 
tmeter.start();
for (int i = 0 ; i < LOOP ; i++) {
    処理
}
tmeter.stop();
std::cout << tmeter.getTimeMilli() / LOOP;

単位はmsecである。

処理時間にばらつきが生じるので、複数回実行し、平均を求めている。

また、小数点1桁表示には
std::cout << cvRound(time / LOOP * 10.0)/ 10.0 << std::endl;
とすればよい。

残念ながら、3.0betaでは、使用できないので注意

2 件のコメント:

  1. OpenCVのバージョンによってcv::TickMeterにバグがある点ご注意ください。以前プルリクエストした修正は2.4.10から反映されているようです(https://github.com/Itseez/opencv/commit/f08d88fa78aab8b2193c80ecfb9893cddff362d5)。3.xだとなぜかopencv_contribのrgbd/test/test_normal.cppに移動しているようです。

    返信削除
    返信
    1. 情報ありがとうございます。手持ちのマシンで自家製のベンチマークをおこなっいています。いくつか、2.4.9のものもあるので、バグに関して調べてみます。

      削除