OpenCV 稀疏矩阵类 cv::SparseMat 详解
1. cv::SparseMat 类概述
在处理数组时,如果数组规模相较于非零元素数量大很多,就可以使用 cv::SparseMat 类。这种情况在线性代数中的稀疏矩阵里很常见,在高维数组中表示数据(尤其是直方图)时也会出现,因为在很多实际应用中,大部分空间都是空的。稀疏表示法只存储实际存在的数据,能节省大量内存。实际上,很多稀疏对象如果用密集格式表示,会占用巨大的空间。不过,稀疏表示法的缺点是,按每个元素计算,其计算速度较慢。但需要注意的是,稀疏矩阵的计算并非绝对慢,因为提前知道很多操作无需执行,也能节省大量计算资源。
OpenCV 的稀疏矩阵类 cv::SparseMat 在很多方面与密集矩阵类 cv::Mat 类似。它们的定义方式相似,支持的操作大多相同,能包含的数据类型也一样。不过,它们内部的数据组织方式差异很大。 cv::Mat 使用的是与 C 数据数组密切相关的数据数组(数据顺序存储,元素地址可根据索引直接计算),而 cv::SparseMat 则使用哈希表来存储非零元素。这个哈希表会自动维护,当数组中的非零元素数量过多,影响查找效率时,哈希表会自动扩容。
2. 访问稀疏数组元素
稀疏数组和密集数组的最大区别在于元素的访问方式。稀疏数组提供了四种不同的访问机制: cv::SparseMat::ptr() 、 cv::SparseMat:
超级会员免费看
订阅专栏 解锁全文
1490

被折叠的 条评论
为什么被折叠?



