CvMat
OpenCV (またはその C++ バージョン)の行配置がどのように機能するかを誰かが説明してくれませんかcv::Mat
? たとえば、行列があるとしましょう
CvMat *cvmat = cvCreateMat(2,3,CV_8UC1);
cvSet2D( cvmat, 0, 0, cvScalar(1) );
cvSet2D( cvmat, 0, 1, cvScalar(2) );
cvSet2D( cvmat, 0, 2, cvScalar(3) );
cvSet2D( cvmat, 1, 0, cvScalar(4) );
cvSet2D( cvmat, 1, 1, cvScalar(5) );
cvSet2D( cvmat, 1, 2, cvScalar(6) );
のドキュメントによるとCvMat
、行は 4 バイトでアラインする必要があります。つまり、行列の最初の行は 1 つのゼロでパディングし、2 番目の行はオフセット +4 から開始する必要があります)。しかし、このコードをデバッグすると、データは連続しており (つまりcvmat->data
) [1,2,3,4,5,6]
、4 バイトのアライメントは見られません。これはドキュメントのバグですか? or のデータの連続性を想定することは常に安全ですCvMat
かcv::Mat
(行列が別の ofc の一部ではない場合)? または、メモリ アライメントの結果としてデータにギャップが生じる可能性のある特別な構成がいくつかありますか?