是否可以在cv :: Mat中保存复杂的数据结构?

时间:2011-11-12 23:12:59

标签: c++ opencv

我有一个cv :: Mat图像,我正在考虑使用相同大小的第二个cv :: Mat,但每个条目存储一个与该像素相对应的复杂数据结构。这可以用cv :: Mat完成,或者是我唯一可以在那里打开的向量向量吗?

2 个答案:

答案 0 :(得分:1)

查看cv::Mat的文档,尤其是构造函数和typechannelsdepth方法,它似乎只能包含简单的OpenCV数据类型(8/16/32位整数,32/64位浮点数,或者这些的1/2/3/4元组,当然不是混合)。

但即便如此,我也不会建议二维数组/矩阵/图像的向量向量(其中所有行具有相同数量的列),而是一个简单的1D向量,其中包含一些简单的索引魔法从2D到1D的映射。这有更好的内存局部性和分配行为。

答案 1 :(得分:0)

这取决于您的数据结构的“复杂程度”。您只能使用其元素具有相同类型的结构。 采用

为您提供这种可能性
Vec<n, type>

以示例

Vec<6,float> vv;
//fill vector
vv.push_back(Vec6f(1,2,3,4,5,6);
Mat m(vv);

Vec<6,float> vec = m.at<Vec6f>(1);

正如克里斯蒂安所说,你不能混合类型(有一个浮动通道和一个char通道)