如何使用 OpenCV 最好地优化多层数据点的编码?
例如,如果有一张森林的图片,我想编码像“森林”这样的大标签,像“树”这样的中等标签,然后像“叶子”或“ Twig ”这样的小标签,一个像素可能有 3标签:森林、树、叶子,然后对于其中的每一个,都可能有一个概率值。
这是一个相对简单的示例,但可以想象有更多重叠的标签。
最简单的方法是为每个可能的标签设置一个 cv::Mat,但我的问题更多是针对优化内存使用的最佳方法。
最佳答案
我认为您可以使用位来编码此信息。例如,假设您使用的是 8U 图像(每像素 1 个字节)。然后你可以使用类似的东西
0x01 : leaf
0x02 : tree
0x04 : forest
来表示这些特征。在这里,您为每个功能使用了一个位掩码,因此您可以
OR
如果一个像素属于多个类别,则为这些值。所以,
0x03
将是 leaf, tree
0x06
将是 tree, forest
对于置信水平,您将不得不使用单独的 channel 。如果您不介意失去一些精度,您可以使用 8U channel 代替 32F channel 。因此,与其将 0.6578 存储在浮点数中,不如将其存储为 66 字节。
如果以这种方式创建的矩阵包含很多零,您可以通过将其存储为稀疏矩阵来进一步减少内存使用量。
关于opencv - 使用 OpenCV 编码多层信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54193356/