首頁 >後端開發 >C++ >如何將 OpenCV Mat 轉換為陣列或向量?

如何將 OpenCV Mat 轉換為陣列或向量?

Barbara Streisand
Barbara Streisand原創
2024-10-27 14:12:29341瀏覽

How to Convert an OpenCV Mat to an Array or Vector?

將 OpenCV Mat 轉換為數組/向量

在 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,轉換變得更簡單:

資料連續性注意事項

  • Mat 資料連續性確保所有資料在記憶體中是連續的。
  • Imread()、clone() 和建構子所建立的 Mat 總是連續的。
非連續 Mats 是從現有 Mats 借用資料(例如行/列選擇)而產生的。

以上是如何將 OpenCV Mat 轉換為陣列或向量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn