与cv :: Mat元素一起存储其他信息

时间:2011-05-14 06:10:20

标签: c++ opencv

存储一些额外信息以及图像像素的最佳方法是什么?现在我正在考虑类似vector<vector<vector<Info*>>>的东西,其中有两个第一个索引表示相应的像素坐标。还有更好的东西吗?

2 个答案:

答案 0 :(得分:1)

通常没有单一的“最佳”解决方案。

你的矢量矢量看起来有点复杂,但如果每个坐标总是有很多相关的信息,那就好了。

如果只有部分像素具有其他信息,则可以使用更稀疏的数据结构

map<coordinates, info>

并且仅存储几个坐标的信息。

答案 1 :(得分:1)

如果您的信息不复杂(可以通过最多4通道矢量描述),您可以将信息存储在另一个cv :: Mat中,其大小与您的图像相同。如果每个像素的信息更复杂,您可以在每个矩阵元素中存储指针:

cv::Mat additionalInfo(image.size(), CV_32S); // CV_32S = int (usually the type used for pointers)
additionalInfo.at<CV_32S>(col,row) = new ComplexStruct; // Writing
ComplexStruct* info = additionalInfo.at<CV_32S>(col,row); // Reading

在尝试此方法之前,请确保:     sizeof(CV_32S)== sizeof(ComplexStruct *)