ホームページ >バックエンド開発 >C++ >OpenCV で大きなマット オブジェクトのロードを高速化するにはどうすればよいですか?

OpenCV で大きなマット オブジェクトのロードを高速化するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-01 22:51:12116ブラウズ

How Can I Speed Up Loading Large Mat Objects in OpenCV?

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");
}

読み込みを高速化するためのヒント

  • デバッグ モードを避ける: パフォーマンス測定は決してデバッグ モードで実行しないでください。デバッグ モードは、コードの実行速度が大幅に低下するためです。
  • メモリの利用可能性を確認します: 特に大きな Mat オブジェクトを処理する場合、FileStorage メソッドが利用可能なメモリを使い果たしていないことを確認してください。
  • バイナリ形式を検討してください: バイナリ ファイル形式は、特に大規模な Mat の場合、速度が大幅に向上します。オブジェクト。

以上がOpenCV で大きなマット オブジェクトのロードを高速化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。