0

私は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;
    }

ただし、検索部分が正しくありません。これを使用して、そのインデックスの要素がスパース マットに追加されているかどうかを確認するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

SparseMat::ptrの定義から:

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

行列要素へのポインターを返します。要素がそこにある (0 以外の) 場合、その要素へのポインターが返されます。存在せず、createMissing=false の場合、NULL ポインターが返されます。それが存在せず、createMissing=true の場合、新しい要素が作成され、0 で初期化されます。それへのポインタが返されます。オプションの hashval ポインターが 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
于 2013-06-19T08:09:35.403 に答える