определяется только для 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)? Или есть какие-то специальные конфигурации, в которых могут быть некоторые пробелы в данных в результате выравнивания памяти?