Rumah > pembangunan bahagian belakang > C++ > Bagaimana dengan Cekap Menukar Mat OpenCV kepada Array atau Vektor?

Bagaimana dengan Cekap Menukar Mat OpenCV kepada Array atau Vektor?

Susan Sarandon
Lepaskan: 2024-10-29 08:21:30
asal
414 orang telah melayarinya

How to Efficiently Convert OpenCV Mat to Array or Vector?

Menukar OpenCV Mat kepada Array/Vector

Masalah:
Untuk pemula dalam OpenCV, mencari fungsi yang sesuai untuk menukar Mat kepada Array boleh mencabar. Kaedah sedia ada seperti .ptr dan .at mungkin tidak menyediakan format data yang diingini.

Jawapan:

Untuk Mat berterusan (di mana semua data disimpan secara berturut-turut), data boleh diambil terus sebagai tatasusunan 1D:

<code class="cpp">std::vector<uchar> array(mat.rows * mat.cols * mat.channels());
if (mat.isContinuous())
    array = mat.data;</code>
Salin selepas log masuk

Untuk Mat tidak berterusan, data perlu diekstrak baris demi baris, menghasilkan tatasusunan 2D:

<code class="cpp">uchar **array = new uchar*[mat.rows];
for (int i = 0; i < mat.rows; ++i)
    array[i] = new uchar[mat.cols * mat.channels()];

for (int i = 0; i < mat.rows; ++i)
    array[i] = mat.ptr<uchar>(i);</code>
Salin selepas log masuk

Kemas kini:

Untuk meningkatkan kesederhanaan, menggunakan std::vector disyorkan:

<code class="cpp">std::vector<uchar> array;
if (mat.isContinuous()) {
    array.assign(mat.data, mat.data + mat.total() * mat.channels());
} else {
    for (int i = 0; i < mat.rows; ++i) {
        array.insert(array.end(), mat.ptr<uchar>(i), mat.ptr<uchar>(i) + mat.cols * mat.channels());
    }
}</code>
Salin selepas log masuk

Untuk jenis data selain CV_8UC1 (cth., CV_32F), gunakan data yang sesuai taip definisi vektor.

Kemas kini 2:

Mengenai kesinambungan data Mat:

  • Matriks yang dicipta oleh imread(), klon( ), atau pembina sentiasa berterusan.
  • Tikar Bukan berterusan hanya timbul apabila meminjam data daripada matriks sedia ada, kecuali apabila data yang dipinjam berterusan dalam matriks asal (cth., baris tunggal atau baris lebar penuh).

Atas ialah kandungan terperinci Bagaimana dengan Cekap Menukar Mat OpenCV kepada Array atau Vektor?. 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