如何最好地利用OpenCV优化多层数据点的编码?
例如,如果有一张森林的图片,并且我想编码大标签(例如“森林”),中等大小的标签(例如“树”),然后编码小标签(例如“叶子”或“分支”)一个像素可能有3个标签:森林,树木,叶子,然后对于每个标签,都有一个概率值。
这是一个相对简单的示例,但是可以想象有更多重叠的标签。
最简单的方法是每个可能的标签只有一个cv :: Mat,但是我的问题更多是针对优化内存使用的最佳方法。
答案 0 :(得分:2)
我认为您可以使用位来编码此信息。例如,假设您正在使用8U图像(每个像素1个字节)。然后,您可以使用类似的
0x01 : leaf
0x02 : tree
0x04 : forest
代表这些功能。在这里,您为每个功能使用了一个位掩码,因此,如果像素属于多个类,则可以OR
使用这些值。
所以
0x03
将是leaf, tree
0x06
将是tree, forest
对于置信度,您将不得不使用单独的渠道。如果您可以保留一些精度,可以使用8U通道代替32F通道。因此,您可以将其存储为66,而不是将其以浮点数形式存储0.6578。
如果以此方式创建的矩阵包含大量零,则可以通过将其存储为稀疏矩阵来进一步减少内存使用。