OpenCV での大きなマットの効率的なロード: 包括的なガイド
大量のメモリを消費する Mat オブジェクトを扱う場合、それらのロードの効率は次のとおりです。最も重要です。 OpenCV の FileStorage メソッドは簡単なアプローチを提供しますが、常に十分であるとは限りません。
代替: バイナリ データのロード
パフォーマンスを大幅に向上させるには、Mat オブジェクトを保存してロードすることを検討してください。生のバイナリ形式。これにより、FileStorage に関連するオーバーヘッドが回避され、大幅な時間の節約につながります。
matwrite 関数と matread 関数を使用した実装
バイナリ読み込みを実装するには、matwrite 関数と matread 関数を利用します。
void matwrite(const string& filename, const Mat& mat) { ... } Mat matread(const string& filename) { ... }
パフォーマンス比較
ベンチマークにより、FileStorage とバイナリ ロードの読み込み速度に大きな違いがあることがわかります。
Using FileStorage: 5523.45 ms Using Raw: 50.0879 ms Using FileStorage: (out of memory) Using Raw: 197.381 ms
補足
コード例
次のコードは、保存、読み込み、パフォーマンスのための matwrite と matread の使用法を示しています。テスト:
#include <opencv2/opencv.hpp> #include <iostream> #include <fstream> using namespace std; using namespace cv; int main() { // Save randomly generated data Mat m(1024*256, 192, CV_8UC1); randu(m, 0, 1000); matwrite("raw.bin", m); // Load saved matrix double tic = getTickCount(); Mat m1 = matread("raw.bin"); // Calculate loading time double toc = (getTickCount() - tic) * 1000. / getTickFrequency(); cout << "Using Raw: " << toc << " ms" << endl; }
大きな Mat オブジェクトにバイナリ読み込みを採用することで、効率を大幅に高めて読み込み時間を短縮し、OpenCV アプリケーションを最適化して最適なパフォーマンスを得ることができます。
以上が大きな OpenCV マットを効率的にロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。