OpenCV での大きなマット オブジェクトのメモリへの読み込みが高速化
OpenCV の FileStorage メソッドは、マット オブジェクトを保存および取得する便利な方法を提供します、これは、大きな Mat オブジェクトをメモリに読み込むための最も効率的なオプションではない可能性があります。ここでは、速度を大幅に改善できる代替アプローチをいくつか紹介します。
バイナリ ファイル形式
マット オブジェクトをバイナリ形式で保存およびロードすると、パフォーマンスが大幅に向上します。 OpenCV の matwrite 関数と matread 関数は、このプロセスを容易にします。バイナリ ファイルを使用すると、OpenCV のシリアル化および逆シリアル化手順に関連するオーバーヘッドが回避され、読み込み時間が大幅に短縮されます。
テスト結果
FileStorage とバイナリ形式の読み込み時間の比較小さい画像と大きい画像の両方:
Using FileStorage: 5523.45 ms (small image) Using Raw: 50.0879 ms (small image) Using FileStorage: (out of memory) (large image) Using Raw: 197.381 ms (large image)
コード例
ここに、matwrite と matread の使用方法を示すコード スニペットを示します。
#include <opencv2/opencv.hpp> #include <iostream> #include <fstream> void matwrite(const std::string& filename, const cv::Mat& mat) { // Save Mat object to a binary file } cv::Mat matread(const std::string& filename) { // Load Mat object from a binary file } int main() { // Generate random data cv::Mat m = cv::Mat::randu(1024*256, 192, CV_8UC1); // Save to files matwrite("fs.yml", m); matwrite("raw.bin", m); // Load from files cv::Mat m1 = matread("fs.yml"); cv::Mat m2 = matread("raw.bin"); }
読み込みを高速化するためのヒント
以上がOpenCV で大きなマット オブジェクトのロードを高速化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。