определяется только для CvMat, а для cv :: Mat вы должны использовать вместо этого метод

кто-нибудь, пожалуйста, объясните мне, как выравнивание строк в OpenCVCvMat (или его версия 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 является[1,2,3,4,5,6]) и я не вижу никакого 4-байтового выравнивания. Является ли это ошибкой в ​​документации и всегда ли безопасно предполагать непрерывность данныхCvMat или жеcv::Mat (в случае, если матрица не является частью другого ofc)? Или есть какие-то специальные конфигурации, в которых могут быть некоторые пробелы в данных в результате выравнивания памяти?

Ответы на вопрос(1)

Ваш ответ на вопрос