Так что OpenCV обрабатывает это немного странно.OpenCV сохраняет Mat в мажорном порядке строк, но адресация его по методу Mat :: at () ложно предполагает мажорный порядок столбцов.Я думаю, что документация Opencv вводит в заблуждение в этом случае.Я должен был написать этот тестовый пример, чтобы убедиться в этом сам.
cv::Mat m(3,3,CV_32FC1,0.0f);
m.at<float>(1,0) = 2;
cout << m << endl;
Так что адресация выполняется с Mat :: at (y, x):
[0, 0,0;
2, 0, 0;
0, 0, 0]
Но необработанный доступ к указателю показывает, что это фактически сохраненная мажорная строка, например, «2» находится на 4-й позиции.Если бы он хранился в главном порядке столбцов, он был бы на 2-й позиции.
float* mp = &m.at<float>(0);
for(int i=0;i<9;i++)
cout << mp[i] << " ";
0 0 0 2 0 0 0 0 0
В качестве дополнительного замечания: Matlab хранит и обращается к матрице в главном порядке столбцов.Это может раздражать, но, по крайней мере, это соответствует.