Dalam OpenCV, mendapatkan data daripada objek Mat boleh mencabar untuk pemula. Artikel ini meneroka proses menukar Mat kepada tatasusunan atau vektor.
Penukaran Terus
Jika ingatan Mat berterusan, penukaran terus kepada tatasusunan 1D mungkin :
<code class="cpp">std::vector<uchar> array(mat.rows * mat.cols * mat.channels()); if (mat.isContinuous()) array = mat.data;</code>
Penukaran Baris-demi-Baris
Untuk Mat bukan berterusan, akses baris demi baris diperlukan untuk mencipta 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>
Pendekatan Ringkas dengan std::vector
Untuk std::vector, penukaran menjadi lebih mudah:
<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>
Data Pertimbangan Kesinambungan
Kesinambungan data Mat memastikan semua data bersebelahan dalam ingatan.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Mat OpenCV kepada Array atau Vektor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!