Сегодня, спустя много часов, я случайно нашел ответ на свой вопрос. Я оставлю здесь ответ, чтобы иметь ссылку для тех, кто борется с документацией OpenCV, чтобы найти правильный ответ.
vector<int> dims = {m, r, c}; //dimensions
cv::Mat m (3, &dims[0], imgs[0].type(), &imgs[0]);
Это создает матрицу 4D из вектора imgs
, где тип является одним из CV_8UC1
, CV_8UC3
или CV_8UC4
в зависимости от количества каналов. Хорошо, что он не копирует вектор.
Хотя это не является частью вопроса, для доступа к пикселю в матрице 4D вы можете сделать следующее:
int x = v1, i = v2, j = v3, c = v4; //v1-4 are some random values within their ranges
cout << (int)m.at<Mat>(x).at<Vec3b>(i,j)[c] << " "
<< (int)imgs[x].at<Vec3b> (i,j)[c] << endl;
Оба будут печатать c
-й канал i,j
-го индекса x
-го изображения.