首頁 >後端開發 >C++ >如何加快 OpenCV 中載入大型 Mat 物件的速度?

如何加快 OpenCV 中載入大型 Mat 物件的速度?

DDD
DDD原創
2024-12-01 22:51:12124瀏覽

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

在OpenCV 中更快地將大型Mat 物件載入到記憶體中

OpenCV 中的FileStorage 方法提供了一種方便的方法來儲存和檢索Mat 對象,它可能不是將大型Mat 物件載入到記憶體中的最有效選擇。以下是幾種可以顯著提高速度的替代方法:

二進位檔案格式

以二進位格式儲存和載入 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");
}

更快載入的提示

  • 避免除錯模式:永遠不應在偵錯模式下進行效能測量,因為它會顯著減慢程式碼執行速度。
  • 檢查記憶體可用性:確保 FileStorage 方法不會耗盡可用內存,尤其是在處理大型 Mat 物件時。
  • 考慮二進位格式:二進位檔案格式提供了卓越的速度改進,特別是對於大型 Mat 物件。

以上是如何加快 OpenCV 中載入大型 Mat 物件的速度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn