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
Lepaskan: 2024-12-02 00:24:09
asal
212 orang telah melayarinya

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) { ... }
Salin selepas log masuk

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
Salin selepas log masuk

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan