私はWindowsを使用しており、C++でopencv 2.4.2を使用しています。で画像を読み取り、imread
Mat オブジェクトに入れます。ptr
その後、Mat クラスの関数を使用して生データへのポインターを取得します。imread
画像にストライドが含まれている場合の仕組みを知りたいです。Mat のデータまたはピクセルのデータのみにストライドがありますか?
追加情報: 配列で記述されたコードを使用していて、Mat クラス用に変更したくないため、生データが必要です。
私はWindowsを使用しており、C++でopencv 2.4.2を使用しています。で画像を読み取り、imread
Mat オブジェクトに入れます。ptr
その後、Mat クラスの関数を使用して生データへのポインターを取得します。imread
画像にストライドが含まれている場合の仕組みを知りたいです。Mat のデータまたはピクセルのデータのみにストライドがありますか?
追加情報: 配列で記述されたコードを使用していて、Mat クラス用に変更したくないため、生データが必要です。
ストライドは、cv::Mat 内のピクセルの新しい各行が、最後の行の終了後に開始されないことです。これは、メモリが 4 バイトの倍数で始まると高速になるためです。したがって、行のバイト数 (ピクセル数 * 色数) が 4 の倍数でない場合にのみ問題になります。
ストライドがない場合、 .isContinuous() が true を返すことを確認できます
画像にアクセスする最も安全な方法は、すべての行をループし、.ptr(row) を使用して行の先頭へのポインターを取得し、その行で処理を行うことです。
opencv を他のライブラリと混在させる必要がある場合は、データ用に独自のメモリを使用する cv::mat を作成し、opencv にこれにストライドがないことを伝えることができます。
詳細については、 https://docs.opencv.org/2.4/modules/core/doc/basic_structures.htmlを参照してください。