使用OpenCV编码多层信息

时间:2019-01-15 05:50:33

标签: opencv storage mat

如何最好地利用OpenCV优化多层数据点的编码?

例如,如果有一张森林的图片,并且我想编码大标签(例如“森林”),中等大小的标签(例如“树”),然后编码小标签(例如“叶子”或“分支”)一个像素可能有3个标签:森林,树木,叶子,然后对于每个标签,都有一个概率值。

这是一个相对简单的示例,但是可以想象有更多重叠的标签。

最简单的方法是每个可能的标签只有一个cv :: Mat,但是我的问题更多是针对优化内存使用的最佳方法。

1 个答案:

答案 0 :(得分:2)

我认为您可以使用位来编码此信息。例如,假设您正在使用8U图像(每个像素1个字节)。然后,您可以使用类似的

0x01 : leaf
0x02 : tree
0x04 : forest

代表这些功能。在这里,您为每个功能使用了一个位掩码,因此,如果像素属于多个类,则可以OR使用这些值。

所以

0x03将是leaf, tree

0x06将是tree, forest

对于置信度,您将不得不使用单独的渠道。如果您可以保留一些精度,可以使用8U通道代替32F通道。因此,您可以将其存储为66,而不是将其以浮点数形式存储0.6578。

如果以此方式创建的矩阵包含大量零,则可以通过将其存储为稀疏矩阵来进一步减少内存使用。