OpenCV 中的图像与大型数组类型
1. 动态与可变存储
在处理大型数组类型时, cv::Mat 是其中的核心。在 OpenCV 的 C++ 实现里,绝大多数函数要么是 cv::Mat 类的成员函数,要么将 cv::Mat 作为参数,或者返回 cv::Mat 类型的值,甚至很多函数兼具这三种情况。
cv::Mat 用于表示任意维度的密集数组。这里的“密集”意味着数组中的每个元素在内存中都有对应的数据值存储,即便该元素的值为零。大多数图像通常以密集数组的形式存储。与之相对的是稀疏数组,稀疏数组通常只存储非零元素。如果数组中有大量元素为零,使用稀疏数组可以节省大量存储空间,但如果数组相对密集,使用稀疏数组则会造成浪费。例如,直方图通常使用稀疏数组,因为大多数直方图的大部分元素为零,存储这些零元素是不必要的。对于稀疏数组,OpenCV 提供了 cv::SparseMat 数据结构。
如果你熟悉 OpenCV 库的 C 接口(2.1 版本之前的实现),你可能记得 IplImage 和 CvMat 数据类型,还有 CvArr 。在 C++ 实现中,这些都被 cv::Mat 所取代,这意味着在函数参数中不再需要对 void* 指针进行可疑的类型转换,并且从整体上提升了库内部的整洁性。
超级会员免费看
订阅专栏 解锁全文
3226

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



