在 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>
数据连续性注意事项
Mat 数据连续性确保所有数据在内存中是连续的。
以上是如何将 OpenCV Mat 转换为数组或向量?的详细内容。更多信息请关注PHP中文网其他相关文章!