OpenCV では、Mat オブジェクトからデータを取得することは初心者にとって難しい場合があります。この記事では、マットを配列またはベクトルに変換するプロセスについて説明します。
直接変換
マットのメモリが連続的であれば、1D 配列への直接変換が可能です。 :
<code class="cpp">std::vector<uchar> array(mat.rows * mat.cols * mat.channels()); if (mat.isContinuous()) array = mat.data;</code>
行ごとの変換
非連続マットの場合、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>
データ連続性に関する考慮事項
マット データの連続性により、すべてのデータがメモリ内で連続していることが保証されます。
以上がOpenCV マットを配列またはベクトルに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。