【发布时间】:2014-05-06 20:58:33
【问题描述】:
我想从 任意数据类型、行维度、列维度和通道维度的一维数据数组构建一个 3 通道矩阵。在我的示例中,我有一个 1x12 双精度数据数组,我想将其转换为 2x2x3 OpenCv 矩阵。
double rawData[] = {1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0};
我的目标是:
Channel 1:
[ 1, 1;
1, 1]
Channel 2:
[ 2, 2;
2, 2]
Channel 3:
[ 3, 3;
3, 3]
这是我尝试过的:
cv::Mat aMat = cv::Mat(2, 2, CV_64FC3, rawData)
但是 OpenCv 不同意它应该如何使用 rawData 缓冲区。当我按通道拆分矩阵并打印每个单独的通道时:
cv::Mat channels[3];
cv::split(aMat ,channels);
确实如此:
Channel 1:
[ 1, 1;
2, 3]
Channel 2:
[ 1, 2;
2, 3]
Channel 3:
[ 1, 2;
3, 3]
我也尝试过将数据加载到 1D Mat 中,然后使用 cv::Reshape 但结果是一样的。
我怎样才能让频道看起来像我想要的那样?我真的必须手动分配每个索引还是有更优雅/优化的方式?
编辑:问题约束
不应重新排列 rawData 中数据的顺序,因为这会增加确定维度和数据类型的复杂性。如果可能,我更愿意使用 OpenCV 接口。
【问题讨论】: