2013-04-02 51 views
0

存在元素我使用的CV_32FC3一個SparseMat,我試圖做到以下幾點:OpenCV的:如何檢查是否在SparseMat

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

SparseMat::ptr定義:

C++: uchar* SparseMat::ptr(int i0, int i1, bool createMissing, size_t* hashval=0) 

返回指針矩陣元件。如果元素在那裏(它是 非零),返回指向它的指針。 如果不存在,並且 createMissing = false,則返回NULL指針。如果它不存在並且 createMissing = true,則創建新元素並使用0初始化。 返回指向它的指針。如果可選哈希值指針不是 NULL,則不會計算元素哈希值,而是使用hashval取代 。

因此,在你的代碼

m.find(2,6) == m.end() 
m.find(2,5) != m.end() 

應該

m.ptr(2,6,false) == NULL 
m.ptr(2,5,false) != NULL