OpenCV:如何检查SparseMat中是否存在元素

时间:2013-04-02 10:48:33

标签: c++ opencv sparse-matrix

我正在使用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;
    }

但是,查找部分不正确,如何使用它来检查该索引处的元素是否已添加到稀疏垫?

由于

1 个答案:

答案 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