使用 OpenCV 对多层信息进行编码

Encoding multiple layers of information with OpenCV

如何使用 OpenCV 优化多层数据点的编码?

例如,如果有一张森林的图片,我想编码像 'forest' 这样的大标签,像 'tree' 这样的中等大小标签,然后像 'leaf' 这样的小标签, 或者 'branch', 一个像素可能有 3 个标签: 森林, 树, 叶子, 然后对于每个标签, 可能有一个概率值。

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

最简单的方法是为每个可能的标签设置一个 cv::Mat,但我的问题更倾向于优化内存使用的最佳方法。

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

这样的东西
0x01 : leaf
0x02 : tree
0x04 : forest

来表示这些特征。在这里,您为每个特征使用了一个位掩码,因此如果一个像素属于多个 class。

,您可以 OR 这些值

所以,

0x03 将是 leaf, tree

0x06 将是 tree, forest

对于置信水平,您将不得不使用单独的渠道。如果您不介意损失一些精度,您可以为这些使用 8U 通道而不是 32F 通道。因此,与其将 0.6578 存储在浮点数中,不如将其存储为字节中的 66。

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