【发布时间】:2025-12-13 06:15:01
【问题描述】:
在许多教程e.g. this one 中,展示了如何使用逗号分隔列表初始化 opencv Mat。但是,当我尝试使用多维 Mat 这样做时,我感到很奇怪。
#include "opencv2/core/core.hpp"
#include <iostream>
int main() {
cv::Mat vect = (cv::Mat_<double>(2, 2, CV_8UC3) << 1,2,3,4,5,6,7,8,9,10,11,12);
std::cout << "vect = " << std::endl << " " << cv::format(vect,"python") << std::endl;
return 12345;
}
输出:
vect =
[[1, 2],
[3, 4]]
可以显式初始化多维 Mat 吗?
编辑:我也无法以其他方式初始化它。
int main() {
int data[2][2][3] = {
{
{1,2,3},
{4,5,6}
},
{
{7,8,9},
{10,11,12}
}
};
cv::Mat vect = cv::Mat(2, 2, CV_8UC3, data);
std::cout << "vect = " << std::endl << " " << cv::format(vect,"python") << std::endl;
return 54321;
}
输出:
vect =
[[[1, 0, 0], [0, 2, 0]],
[[0, 0, 3], [0, 0, 0]]]
所以我的输入数组中 [0][0][1] 的元素最终在 Mat 中的 [0][1][1] ?这里到底发生了什么……
【问题讨论】:
标签: c++ opencv multidimensional-array