我正在使用SparseMat
CV_32FC3
,我正在尝试执行以下操作:
int dims = 2;
int size[] = {10,10};
SparseMat m = SparseMat(dims, size, CV_32FC3);
m.ref<Vec3f>(2,5)[0] = 0.5;
m.ref<Vec3f>(2,5)[0] = 0.5;
m.ref<Vec3f>(2,5)[0] = 0.5;
if(m.find(2,6) == m.end()){
cout << " could not find 2,6" << endl;
}
if(m.find(2,5) != m.end()){
cout << "found 2, 5" << m.ref<Vec3f>(2,5)[0] << ", " << .ref<Vec3f>(2,5)[1] << ", " << .ref<Vec3f>(2,5)[2] << endl;
}
但是,查找部分不正确,如何使用它来检查该索引处的元素是否已添加到稀疏垫?
由于
答案 0 :(得分:1)
根据SparseMat::ptr的定义:
C++: uchar* SparseMat::ptr(int i0, int i1, bool createMissing, size_t* hashval=0)
返回指向矩阵元素的指针。如果元素存在(它是 非零),返回指向它的指针。 如果它不在那里 createMissing = false,返回NULL指针。如果不存在则返回 createMissing = true,创建新元素并使用0初始化。 返回指针。如果可选的哈希值指针不是 NULL,不计算元素哈希值,但采用哈希值 代替。
所以在你的代码中
m.find(2,6) == m.end()
m.find(2,5) != m.end()
应该是
m.ptr(2,6,false) == NULL
m.ptr(2,5,false) != NULL