2

私はWindowsを使用しており、C++でopencv 2.4.2を使用しています。で画像を読み取り、imreadMat オブジェクトに入れます。ptrその後、Mat クラスの関数を使用して生データへのポインターを取得します。imread画像にストライドが含まれている場合の仕組みを知りたいです。Mat のデータまたはピクセルのデータのみにストライドがありますか?

追加情報: 配列で記述されたコードを使用していて、Mat クラス用に変更したくないため、生データが必要です。

4

1 に答える 1

2

ストライドは、cv::Mat 内のピクセルの新しい各行が、最後の行の終了後に開始されないことです。これは、メモリが 4 バイトの倍数で始まると高速になるためです。したがって、行のバイト数 (ピクセル数 * 色数) が 4 の倍数でない場合にのみ問題になります。

ストライドがない場合、 .isContinuous() が true を返すことを確認できます

画像にアクセスする最も安全な方法は、すべての行をループし、.ptr(row) を使用して行の先頭へのポインターを取得し、その行で処理を行うことです。

opencv を他のライブラリと混在させる必要がある場合は、データ用に独自のメモリを使用する cv::mat を作成し、opencv にこれにストライドがないことを伝えることができます。

詳細については、 https://docs.opencv.org/2.4/modules/core/doc/basic_structures.htmlを参照してください。

于 2012-07-20T04:55:23.013 に答える