-
Notifications
You must be signed in to change notification settings - Fork 13
OpenCVメモリ使用量計測
atinfinity edited this page May 4, 2015
·
6 revisions
Hacking OpenCV for fun and profitというブログ記事にて「OpenCVを拡張したメモリ使用量計測方法」が紹介されていたので,ここではその機能について紹介します.
- OpenCVメモリ使用量計測機能が入ったソースを取得する
- 必要な箇所をマージする(後程追記します)
- CMakeオプション
ENABLE_MEMORY_SNAPSHOTS
をONにしてOpenCVをビルドする - OpenCVを利用したプログラム中で計測したい箇所を
MEASURE_MEMORY
マクロで囲む
#define MEASURE_MEMORY(x) { \
size_t memOnStart = cv::memorySnapshot().allocatedMemory; x;\
size_t memOnEnd = cv::memorySnapshot().allocatedMemory; \
std::cout << #x << "," << "\t" << memOnStart / (1024.0*1024.0) << "[MB]" << \
" -> " << \
memOnEnd / (1024.0*1024.0) << "[MB]" << std::endl; }
- 処理xを行う前のOpenCVメモリ使用量(memOnStart)を取得する
- 処理xを実行する
- 処理xを行った後のOpenCVメモリ使用量(memOnEnd)を取得する
- memOnStart、 memOnEndの値を標準出力する
- OpenCV APIが使用するメモリ量しか計測できない
- CMakeオプション
ENABLE_MEMORY_SNAPSHOTS
をONにしたOpenCVビルドでしか計測できない
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#define ENABLE_MEASURE_MEMORY
#ifndef ENABLE_MEASURE_MEMORY
#define MEASURE_MEMORY(x) {x;}
#else
#define MEASURE_MEMORY(x) { \
size_t memOnStart = cv::memorySnapshot().allocatedMemory; x;\
size_t memOnEnd = cv::memorySnapshot().allocatedMemory; \
std::cout << #x << "," << "\t" << memOnStart / (1024.0*1024.0) << "[MB]" \
<< " -> " << \
memOnEnd / (1024.0*1024.0) << "[MB]" << std::endl; }
#endif
int main(int argc, char** argv)
{
cv::Mat src, dst;
MEASURE_MEMORY(src = cv::imread("lena.jpg", cv::IMREAD_COLOR));
MEASURE_MEMORY(cv::resize(src, dst, cv::Size(), 5.0, 5.0));
MEASURE_MEMORY(dst.release());
return 0;
}
src = cv::imread("lena.jpg", cv::IMREAD_COLOR), 0.332099[MB] -> 1.0821[MB]
cv::resize(src, dst, cv::Size(), 5.0, 5.0), 1.0821[MB] -> 19.8321[MB]
dst.release(), 19.8321[MB] -> 1.0821[MB]