在 OpenCV 中,從 Mat 物件獲取資料對於初學者來說可能具有挑戰性。本文探討了將 Mat 轉換為陣列或向量的過程。
直接轉換
如果Mat 的記憶體是連續的,可以直接轉換為一維數組:
<code class="cpp">std::vector<uchar> array(mat.rows * mat.cols * mat.channels()); if (mat.isContinuous()) array = mat.data;</code>
逐行轉換
對於非連續Mats,建立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>
使用std::vector 的簡化方法
使用std::vector 的簡化方法
<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>
對於std::vector,轉換變得更簡單:
資料連續性注意事項
以上是如何將 OpenCV Mat 轉換為陣列或向量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!