Rumah >pembangunan bahagian belakang >C++ >Bagaimana dengan Cekap Menukar Mat OpenCV kepada Array atau Vektor?
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>
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>
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>
Untuk jenis data selain CV_8UC1 (cth., CV_32F), gunakan data yang sesuai taip definisi vektor.
Kemas kini 2:
Mengenai kesinambungan data Mat:
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!