以前は、処理時間の計測に
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では、使用できないので注意
OpenCVのバージョンによってcv::TickMeterにバグがある点ご注意ください。以前プルリクエストした修正は2.4.10から反映されているようです(https://github.com/Itseez/opencv/commit/f08d88fa78aab8b2193c80ecfb9893cddff362d5)。3.xだとなぜかopencv_contribのrgbd/test/test_normal.cppに移動しているようです。
返信削除情報ありがとうございます。手持ちのマシンで自家製のベンチマークをおこなっいています。いくつか、2.4.9のものもあるので、バグに関して調べてみます。
削除