Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memuatkan Tikar OpenCV Besar dengan Cekap?

Bagaimanakah Saya Boleh Memuatkan Tikar OpenCV Besar dengan Cekap?

Susan Sarandon
Susan Sarandonasal
2024-12-02 00:24:09130semak imbas

How Can I Efficiently Load Large OpenCV Mats?

Pemuatan Tikar Besar yang Cekap dalam OpenCV: Panduan Komprehensif

Apabila berurusan dengan objek Mat intensif memori yang luas, kecekapan dalam memuatkannya menjadi terpenting. Walaupun kaedah FileStorage OpenCV menyediakan pendekatan yang mudah, ia mungkin tidak selalu mencukupi.

Alternatif: Pemuatan Data Perduaan

Untuk prestasi yang dipertingkatkan dengan ketara, pertimbangkan untuk menyimpan dan memuatkan objek Mat dalam format binari mentah. Ini memintas overhed yang dikaitkan dengan FileStorage, yang membawa kepada penjimatan masa yang banyak.

Pelaksanaan dengan Fungsi matwrite dan matread

Untuk melaksanakan pemuatan binari, gunakan matwrite dan matread fungsi:

void matwrite(const string& filename, const Mat& mat) { ... }
Mat matread(const string& filename) { ... }

Perbandingan Prestasi

Tanda aras mendedahkan perbezaan besar dalam kelajuan pemuatan antara FileStorage dan pemuatan binari:

Using FileStorage: 5523.45 ms
Using Raw:         50.0879 ms

Using FileStorage: (out of memory)
Using Raw:         197.381 ms

Tambahan Nota

  • Pengukuran prestasi hendaklah dijalankan dalam mod pelepas, bukan mod nyahpepijat.
  • Penghadan memori mungkin menghalang pemuatan Mat besar menggunakan FileStorage, manakala pemuatan binari menawarkan penyelesaian yang berdaya maju.

Kod Contoh

Kod berikut menunjukkan penggunaan matwrite dan matread untuk menyimpan, memuatkan dan ujian prestasi:

#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;
}

Dengan menggunakan pemuatan binari untuk objek Mat yang besar, anda boleh dengan ketara meningkatkan kecekapan dan mengurangkan masa pemuatan, mengoptimumkan aplikasi OpenCV anda untuk prestasi optimum.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memuatkan Tikar OpenCV Besar dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn