Rumah >pembangunan bahagian belakang >C++ >Bagaimana dengan Cekap Menukar Mat OpenCV kepada Array atau Vektor?
Tukar Mat kepada Array atau Vector dalam OpenCV
Dalam operasi matriks OpenCV, kadangkala terdapat keperluan untuk menukar Mat kepada Array atau Vector . Artikel ini menyediakan panduan komprehensif untuk mencapai penukaran sedemikian, menggunakan fungsi teguh OpenCV.
Penukaran Terus kepada Array
Jika tikar objek Mat mempunyai memori berterusan, datanya boleh dapat diambil secara terus sebagai tatasusunan 1D:
<code class="cpp">std::vector<uchar> array(mat.rows * mat.cols * mat.channels()); if (mat.isContinuous()) array = mat.data;</code>
Penukaran kepada Tatasusunan Berasaskan Baris
Dalam kes di mana memori tidak berterusan, data boleh diperolehi baris mengikut 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>
Penukaran Vektor Alternatif
Menggunakan std::vector menawarkan pendekatan alternatif untuk menukar Mat kepada tatasusunan:
<code class="cpp">std::vector<uchar> array; if (mat.isContinuous()) { // array.assign(mat.datastart, mat.dataend); // May cause issues for sub-matrices 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>
Menukar kepada Vektor Jenis Lain
Untuk Mat OpenCV dengan jenis data lain, seperti CV_32F, proses penukaran adalah serupa:
<code class="cpp">std::vector<float> array; if (mat.isContinuous()) { // array.assign((float*)mat.datastart, (float*)mat.dataend); // May cause issues for sub-matrices array.assign((float*)mat.data, (float*)mat.data + mat.total() * mat.channels()); } else { for (int i = 0; i < mat.rows; ++i) { array.insert(array.end(), mat.ptr<float>(i), mat.ptr<float>(i) + mat.cols * mat.channels()); } }</code>
Memahami Kesinambungan Data Mat
Adalah penting untuk memahami kesinambungan data Mat untuk melaksanakan penukaran dengan berkesan. Perkara utama yang perlu diberi perhatian ialah:
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!