Основное различие между cv::Mat
и cv::SparseMat
заключается в том, как они хранят данные внутри.
cv::Mat
использует массив данных , тесно связанный с массивом данных C (в котором данные последовательно упаковываются, а адреса непосредственно вычисляются из индексов элемента)
в то время,
cv::SparseMat
использует хеш-таблицу для хранения только ненулевых элементов. Эта хеш-таблица поддерживается автоматически, поэтому, когда количество (ненулевых) элементов в массиве становится слишком большим для эффективного поиска, таблица автоматически увеличивается.
Проще говоря,
cv::Mat
класс используется для представления плотных массивов любого числа измерений.
cv::SparseMat
класс используется, когда массив может быть очень большим по сравнению с количеством ненулевых записей.
И cv:Mat
, и cv::SparseMat
являются базовыми структурами данных в C ++-реализации OpenCV; класс cv::Mat
является самой большой реализацией. Подробнее о них и других основных структурах данных в OpenCV здесь
Подробнее о базовом контейнере изображений в OpenCV здесь .