OpenCV 3.0でTickMeterを使う - atinfinity/lab GitHub Wiki
OpenCV 2.4.xでは処理時間を計測するためのcv::TickMeter
クラスが用意されていたのですが,OpenCV 3.0からこの機能がなくなってしまいました.ここではOpenCV 3.0でTickMeterを使う方法について紹介します.
cv::TickMeter class addition #6821がマージされたことでcv::TickMeterが復活したため、OpenCV 3.2以降ではcv::TickMeterが使える見込みです。
OpenCV 3.0でTickMeterを使う方法は以下の通りです.
-
opencv-3.0.0\samples\gpu
にあるtick_meter.hppを自身のプロジェクトにコピーする - OpenCV 3.0に同梱されるtick_meter.hppには処理時間の計算方法にバグがあるので修正する(※修正方法は後述)
- 使用したいソースコードにて,OpenCVヘッダインクルードの後に
#include "tick_meter.hpp"
としてインクルードする
OpenCV 3.0に同梱されるtick_meter.hppは秒,ミリ秒,マイクロ秒の計算方法が誤っているので以下のようにtick_meter.hppを変更する必要があります.
double TickMeter::getTimeMicro() const { return (double)getTimeTicks()/cv::getTickFrequency(); }
double TickMeter::getTimeMilli() const { return getTimeMicro()*1e-3; }
double TickMeter::getTimeSec() const { return getTimeMilli()*1e-3; }
double TickMeter::getTimeMicro() const { return getTimeMilli()*1e3; }
double TickMeter::getTimeMilli() const { return getTimeSec()*1e3; }
double TickMeter::getTimeSec() const { return (double)getTimeTicks()/cv::getTickFrequency(); }
OpenCV 3.0でTickMeterを使うサンプルコードは以下の通りです.
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include "tick_meter.hpp" // TickMeterクラスを使うためにインクルードする
#include <iostream>
int main(int argc, const char* argv[])
{
cv::Mat src = cv::imread("lena.jpg", cv::IMREAD_COLOR);
cv::Mat dst;
// 画像の読み込みに失敗したらエラー終了する
if (src.empty())
{
std::cerr << "Failed to open image file." << std::endl;
return -1;
}
TickMeter meter;
// 測りたい処理の前にTickMeterクラスのstartメソッドを呼ぶ
meter.start();
// 測りたい処理
cv::resize(src, dst, cv::Size(), 5.0, 5.0);
// 測りたい処理の後にTickMeterクラスのstopメソッドを呼ぶ
meter.stop();
// getTimeMilliメソッドを呼ぶ(※ミリ秒単位の結果を取得できる)
std::cout << meter.getTimeMilli() << "[ms]" << std::endl;
return 0;
}
-
OpenCV 2.4.xではcv名前空間内で定義されていたので
cv::TickMeter
として使用できましたが,3.0同梱のtick_meter.hppでは名前空間が使われていないのでTickMeter
として使用する必要があります.- tick_meter.hppにnamespaceを追加すればOpenCV 2.4.xと同じような使い方が可能です.
-
OpenCVヘッダインクルードの後に
#include "tick_meter.hpp"
としてインクルードする必要があります.- tick_meter.hppの先頭に
#include <opencv2/core.hpp>
を追加すればこの制限はなくすことができます.
- tick_meter.hppの先頭に
筆者はOpenCV 3.0.0で動作確認しました.