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

Is it possible to hold a complex data structure inside of a cv::Mat?

本文关键字:复杂 数据结构 保存 Mat 有可能 cv 是否      更新时间:2023-10-16

我有一个cv::Mat图像,我正在考虑具有相同大小的第二个cv::Mat,但每个条目存储对应于该像素的复杂数据结构。这可以用cv::Mat来完成,还是向量的向量是我唯一的开放?

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

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

这取决于你的数据结构有多复杂。您只能使用元素具有相同类型的结构。opencv通过

提供了这种可能性
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);

正如christian所说,你不能混合类型(有一个float通道和一个char通道)