有人可以向我解释一下 OpenCV CvMat
(或其 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 个字节,即矩阵的第一行应填充一个零,第二行应从偏移量 +4 开始)。但是,如果我调试这段代码,数据是连续的(即cvmat->data
is [1,2,3,4,5,6]
),我看不到任何 4 字节对齐。这是文档中的错误吗?假设CvMat
or的数据的连续性总是安全的cv::Mat
(如果矩阵不是另一个 ofc 的一部分)?或者是否有一些特殊的配置,由于内存对齐,数据中可能会出现一些间隙?