OpenCV 4.11.0
开源计算机视觉
|
#include <opencv2/core/mat.hpp>
类 | |
结构体 | Hdr |
稀疏矩阵头文件 更多… | |
结构体 | Node |
稀疏矩阵节点 - 散列表元素 更多… | |
公共类型 | |
枚举 | { MAGIC_VAL =0x42FD0000 , MAX_DIM =32 , HASH_SCALE =0x5bd1e995 , HASH_BIT =0x80000000 } |
typedef SparseMatConstIterator | const_iterator |
typedef SparseMatIterator | iterator |
公共成员函数 | |
SparseMat () | |
各种SparseMat 构造函数。 | |
SparseMat (const Mat &m) | |
SparseMat (const SparseMat &m) | |
SparseMat (int dims, const int *_sizes, int _type) | |
~SparseMat () | |
析构函数 | |
void | addref () |
手动增加对头的引用计数。 | |
void | assignTo (SparseMat &m, int type=-1) const |
int | channels () const |
返回通道数 | |
void | clear () |
将所有稀疏矩阵元素设置为 0,这意味着清除散列表。 | |
CV_NODISCARD_STD SparseMat | clone () const |
创建矩阵的完整副本 | |
void | convertTo (Mat &m, int rtype, double alpha=1, double beta=0) const |
将稀疏矩阵转换为密集 n 维矩阵,并可以选择类型转换和缩放。 | |
void | convertTo (SparseMat &m, int rtype, double alpha=1) const |
将所有矩阵元素乘以指定的比例因子 alpha,并将结果转换为指定的数据类型 | |
void | copyTo (Mat &m) const |
将稀疏矩阵转换为密集矩阵。 | |
void | copyTo (SparseMat &m) const |
将所有数据复制到目标矩阵。m 的所有先前内容都将被清除 | |
void | create (int dims, const int *_sizes, int _type) |
重新分配稀疏矩阵。 | |
int | depth () const |
返回稀疏矩阵元素的深度 | |
int | dims () const |
返回矩阵维数 | |
size_t | elemSize () const |
将稀疏矩阵转换为旧式表示;所有元素都将被复制。 | |
size_t | elemSize1 () const |
返回elemSize()/channels() | |
SparseMatIterator | end () |
返回矩阵末尾的稀疏矩阵迭代器 | |
template<typename _Tp > | |
SparseMatIterator_< _Tp > | end () |
返回矩阵末尾的类型化稀疏矩阵迭代器 | |
SparseMatConstIterator | end () const |
返回矩阵末尾的只读稀疏矩阵迭代器 | |
template<typename _Tp > | |
SparseMatConstIterator_< _Tp > | end () const |
返回矩阵末尾的类型化只读稀疏矩阵迭代器 | |
void | erase (const int *idx, size_t *hashval=0) |
删除指定的元素(nD 案例) | |
void | erase (int i0, int i1, int i2, size_t *hashval=0) |
删除指定的元素(3D 案例) | |
void | erase (int i0, int i1, size_t *hashval=0) |
删除指定的元素(2D 案例) | |
size_t | hash (const int *idx) const |
计算元素哈希值(nD 案例) | |
size_t | hash (int i0) const |
计算元素哈希值(1D 案例) | |
size_t | hash (int i0, int i1) const |
计算元素哈希值(2D 案例) | |
size_t | hash (int i0, int i1, int i2) const |
计算元素哈希值(3D 案例) | |
uchar * | newNode (const int *idx, size_t hashval) |
Node * | node (size_t nidx) |
const Node * | node (size_t nidx) const |
size_t | nzcount () const |
返回非零元素的数量(= 散列表节点的数量) | |
SparseMat & | operator= (const Mat &m) |
等效于相应的构造函数 | |
SparseMat & | operator= (const SparseMat &m) |
赋值运算符。这是一个 O(1) 操作,即不复制数据 | |
void | release () |
void | removeNode (size_t hidx, size_t nidx, size_t previdx) |
void | resizeHashTab (size_t newsize) |
const int * | size () const |
返回尺寸数组,如果矩阵未分配则返回 NULL | |
int | size (int i) const |
返回第 i 维矩阵的尺寸(或 0) | |
int | type () const |
返回稀疏矩阵元素的类型 | |
template<typename _Tp > | |
const _Tp & | value (const Node *n) const |
返回存储在稀疏矩阵节点中的值 | |
template<typename _Tp > | |
_Tp & | value (Node *n) |
返回存储在稀疏矩阵节点中的值 | |
uchar * | ptr (int i0, bool createMissing, size_t *hashval=0) |
返回指定元素的指针(一维情况) | |
uchar * | ptr (int i0, int i1, bool createMissing, size_t *hashval=0) |
返回指定元素的指针(二维情况) | |
uchar * | ptr (int i0, int i1, int i2, bool createMissing, size_t *hashval=0) |
返回指定元素的指针(三维情况) | |
uchar * | ptr (const int *idx, bool createMissing, size_t *hashval=0) |
返回指定元素的指针(n维情况) | |
template<typename _Tp > | |
_Tp & | ref (int i0, size_t *hashval=0) |
返回指定元素的引用(一维情况) | |
template<typename _Tp > | |
_Tp & | ref (int i0, int i1, size_t *hashval=0) |
返回指定元素的引用(二维情况) | |
template<typename _Tp > | |
_Tp & | ref (int i0, int i1, int i2, size_t *hashval=0) |
返回指定元素的引用(三维情况) | |
template<typename _Tp > | |
_Tp & | ref (const int *idx, size_t *hashval=0) |
返回指定元素的引用(n维情况) | |
template<typename _Tp > | |
_Tp | value (int i0, size_t *hashval=0) const |
返回指定元素的值(一维情况) | |
template<typename _Tp > | |
_Tp | value (int i0, int i1, size_t *hashval=0) const |
返回指定元素的值(二维情况) | |
template<typename _Tp > | |
_Tp | value (int i0, int i1, int i2, size_t *hashval=0) const |
返回指定元素的值(三维情况) | |
template<typename _Tp > | |
_Tp | value (const int *idx, size_t *hashval=0) const |
返回指定元素的值(n维情况) | |
template<typename _Tp > | |
const _Tp * | find (int i0, size_t *hashval=0) const |
返回指定元素的指针(一维情况) | |
template<typename _Tp > | |
const _Tp * | find (int i0, int i1, size_t *hashval=0) const |
返回指定元素的指针(二维情况) | |
template<typename _Tp > | |
const _Tp * | find (int i0, int i1, int i2, size_t *hashval=0) const |
返回指定元素的指针(三维情况) | |
template<typename _Tp > | |
const _Tp * | find (const int *idx, size_t *hashval=0) const |
返回指定元素的指针(n维情况) | |
SparseMatIterator | begin () |
返回矩阵起始位置的稀疏矩阵迭代器 | |
template<typename _Tp > | |
SparseMatIterator_< _Tp > | begin () |
返回矩阵起始位置的稀疏矩阵迭代器 | |
SparseMatConstIterator | begin () const |
返回矩阵起始位置的只读稀疏矩阵迭代器 | |
template<typename _Tp > | |
SparseMatConstIterator_< _Tp > | begin () const |
返回矩阵起始位置的只读稀疏矩阵迭代器 | |
公共属性 | |
int | flags |
Hdr * | hdr |
类SparseMat表示多维稀疏数值数组。
这种稀疏数组可以存储Mat可以存储的任何类型的元素。稀疏意味着只存储非零元素(但是,由于对稀疏矩阵的操作,它的一些存储元素实际上可能变为 0。您可以使用SparseMat::erase检测这些元素并将其删除)。非零元素存储在一个哈希表中,该哈希表在填充时会增长,以便搜索时间平均为 O(1)(无论元素是否存在)。可以使用以下方法访问元素
const int dims = 5;
int size[5] = {10, 10, 10, 10, 10};
SparseMat sparse_mat(dims, size, CV_32F);
for(int i = 0; i < 1000; i++)
int idx[dims];
for(int k = 0; k < dims; k++)
idx[k] = rand() % size[k];
sparse_mat.ref<float>(idx) += 1.f;
cout << "nnz = " << sparse_mat.nzcount() << endl;
double s = 0;
int dims = sparse_mat.dims();
for(; it != it_end; ++it)
const SparseMat::Node* n = it.node();
printf("(");
for(int i = 0; i < dims; i++)
printf("%d%s", n->idx[i], i < dims-1 ? ", " : ")");
printf(": %g\n", it.value<float>());
s += *it;
printf("Element sum is %g\n", s);
for(; it != it_end; ++it)
cv::SparseMat::SparseMat | ( | ) |
各种SparseMat 构造函数。
cv::SparseMat::SparseMat | ( | int | dims, |
const int * | _sizes, | ||
int | _type ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。
dims | 数组维度。 |
_sizes | 所有维度上的稀疏矩阵大小。 |
_type | 稀疏矩阵数据类型。 |
cv::SparseMat::SparseMat | ( | const SparseMat & | m | ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。
m | 复制构造函数的源矩阵。如果 m 是稠密矩阵 (ocvMat),则将其转换为稀疏表示。 |
|
explicit |
这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。
m | 复制构造函数的源矩阵。如果 m 是稠密矩阵 (ocvMat),则将其转换为稀疏表示。 |
cv::SparseMat::~SparseMat | ( | ) |
析构函数
void cv::SparseMat::addref | ( | ) |
手动增加对头的引用计数。
void cv::SparseMat::assignTo | ( | SparseMat & | m, |
int | type = -1 ) const |
SparseMatIterator cv::SparseMat::begin | ( | ) |
返回矩阵起始位置的稀疏矩阵迭代器
返回指向第一个稀疏矩阵元素的稀疏矩阵迭代器
SparseMatIterator_< _Tp > cv::SparseMat::begin | ( | ) |
返回矩阵起始位置的稀疏矩阵迭代器
SparseMatConstIterator cv::SparseMat::begin | ( | ) | const |
返回矩阵起始位置的只读稀疏矩阵迭代器
SparseMatConstIterator_< _Tp > cv::SparseMat::begin | ( | ) | const |
返回矩阵起始位置的只读稀疏矩阵迭代器
int cv::SparseMat::channels | ( | ) | const |
返回通道数
void cv::SparseMat::clear | ( | ) |
将所有稀疏矩阵元素设置为 0,这意味着清除散列表。
CV_NODISCARD_STD SparseMat cv::SparseMat::clone | ( | ) | const |
创建矩阵的完整副本
void cv::SparseMat::convertTo | ( | Mat & | m, |
int | rtype, | ||
double | alpha = 1, | ||
double | beta = 0 ) const |
将稀疏矩阵转换为密集 n 维矩阵,并可以选择类型转换和缩放。
[输出] | m | - 输出矩阵;如果它在操作前没有合适的大小或类型,则会重新分配 |
[输入] | rtype | - 期望的输出矩阵类型,或者说是深度,因为通道数与输入相同;如果 rtype 为负数,则输出矩阵将与输入具有相同的类型。 |
[输入] | alpha | - 可选比例因子 |
[输入] | beta | - 可选添加到缩放值中的增量 |
void cv::SparseMat::convertTo | ( | SparseMat & | m, |
int | rtype, | ||
double | alpha = 1 ) const |
将所有矩阵元素乘以指定的比例因子 alpha,并将结果转换为指定的数据类型
void cv::SparseMat::copyTo | ( | Mat & | m | ) | const |
将稀疏矩阵转换为密集矩阵。
void cv::SparseMat::copyTo | ( | SparseMat & | m | ) | const |
将所有数据复制到目标矩阵。m 的所有先前内容都将被清除
void cv::SparseMat::create | ( | int | dims, |
const int * | _sizes, | ||
int | _type ) |
int cv::SparseMat::depth | ( | ) | const |
返回稀疏矩阵元素的深度
int cv::SparseMat::dims | ( | ) | const |
返回矩阵维数
size_t cv::SparseMat::elemSize | ( | ) | const |
将稀疏矩阵转换为旧式表示;所有元素都将被复制。
返回每个元素的大小(以字节为单位),不包括开销(SparseMat::Node 元素占据的空间)。
size_t cv::SparseMat::elemSize1 | ( | ) | const |
返回elemSize()/channels()
SparseMatIterator cv::SparseMat::end | ( | ) |
返回矩阵末尾的稀疏矩阵迭代器
返回指向稀疏矩阵最后一个元素之后元素的稀疏矩阵迭代器。
SparseMatIterator_< _Tp > cv::SparseMat::end | ( | ) |
返回矩阵末尾的类型化稀疏矩阵迭代器
SparseMatConstIterator cv::SparseMat::end | ( | ) | const |
返回矩阵末尾的只读稀疏矩阵迭代器
SparseMatConstIterator_< _Tp > cv::SparseMat::end | ( | ) | const |
返回矩阵末尾的类型化只读稀疏矩阵迭代器
void cv::SparseMat::erase | ( | const int * | idx, |
size_t * | hashval = 0 ) |
删除指定的元素(nD 案例)
void cv::SparseMat::erase | ( | int | i0, |
int | i1, | ||
int | i2, | ||
size_t * | hashval = 0 ) |
删除指定的元素(3D 案例)
void cv::SparseMat::erase | ( | int | i0, |
int | i1, | ||
size_t * | hashval = 0 ) |
删除指定的元素(2D 案例)
const _Tp * cv::SparseMat::find | ( | const int * | idx, |
size_t * | hashval = 0 ) const |
返回指定元素的指针(n维情况)
const _Tp * cv::SparseMat::find | ( | int | i0, |
int | i1, | ||
int | i2, | ||
size_t * | hashval = 0 ) const |
返回指定元素的指针(三维情况)
const _Tp * cv::SparseMat::find | ( | int | i0, |
int | i1, | ||
size_t * | hashval = 0 ) const |
返回指定元素的指针(二维情况)
返回指定元素的指针(一维情况)
如果存在,则返回指向指定稀疏矩阵元素的指针。
find<_Tp>(i0,...[,hashval])
等效于 (_const Tp*)ptr(i0,...false[,hashval])
。
如果指定的元素不存在,则方法返回 NULL。
size_t cv::SparseMat::hash | ( | const int * | idx | ) | const |
计算元素哈希值(nD 案例)
size_t cv::SparseMat::hash | ( | int | i0 | ) | const |
计算元素哈希值(1D 案例)
size_t cv::SparseMat::hash | ( | int | i0, |
int | i1 ) const |
计算元素哈希值(2D 案例)
size_t cv::SparseMat::hash | ( | int | i0, |
int | i1, | ||
int | i2 ) const |
计算元素哈希值(3D 案例)
uchar * cv::SparseMat::newNode | ( | const int * | idx, |
size_t | hashval ) |
Node * cv::SparseMat::node | ( | size_t | nidx | ) |
const Node * cv::SparseMat::node | ( | size_t | nidx | ) | const |
size_t cv::SparseMat::nzcount | ( | ) | const |
返回非零元素的数量(= 散列表节点的数量)
uchar * cv::SparseMat::ptr | ( | const int * | idx, |
bool | createMissing, | ||
size_t * | hashval = 0 ) |
返回指定元素的指针(n维情况)
uchar * cv::SparseMat::ptr | ( | int | i0, |
bool | createMissing, | ||
size_t * | hashval = 0 ) |
返回指定元素的指针(一维情况)
针对一维、二维、三维情况的专用变体以及用于n维情况的generic_type变体。返回指向矩阵元素的指针。
uchar * cv::SparseMat::ptr | ( | int | i0, |
int | i1, | ||
bool | createMissing, | ||
size_t * | hashval = 0 ) |
返回指定元素的指针(二维情况)
uchar * cv::SparseMat::ptr | ( | int | i0, |
int | i1, | ||
int | i2, | ||
bool | createMissing, | ||
size_t * | hashval = 0 ) |
返回指定元素的指针(三维情况)
返回指定元素的引用(n维情况)
返回指定元素的引用(三维情况)
返回指定元素的引用(二维情况)
返回指定元素的引用(一维情况)
返回指向指定稀疏矩阵元素的读写引用。
ref<_Tp>(i0,...[,hashval])
等效于 *(_Tp*)ptr(i0,...,true[,hashval])
。该方法始终返回有效的引用。如果元素不存在,则创建它并将其初始化为0。
void cv::SparseMat::release | ( | ) |
void cv::SparseMat::removeNode | ( | size_t | hidx, |
size_t | nidx, | ||
size_t | previdx ) |
void cv::SparseMat::resizeHashTab | ( | size_t | newsize | ) |
const int * cv::SparseMat::size | ( | ) | const |
返回尺寸数组,如果矩阵未分配则返回 NULL
int cv::SparseMat::size | ( | int | i | ) | const |
返回第 i 维矩阵的尺寸(或 0)
int cv::SparseMat::type | ( | ) | const |
返回稀疏矩阵元素的类型
返回指定元素的值(n维情况)
_Tp cv::SparseMat::value | ( | int | i0, |
int | i1, | ||
int | i2, | ||
size_t * | hashval = 0 ) const |
返回指定元素的值(三维情况)
返回指定元素的值(二维情况)
返回指定元素的值(一维情况)
返回指定稀疏矩阵元素的值。
value<_Tp>(i0,...[,hashval])
等效于
也就是说,如果元素不存在,则方法返回0。
int cv::SparseMat::flags |
Hdr* cv::SparseMat::hdr |