6

FREAK記述抽出からの記述子のマトリックスがあり、各行は64要素の記述子です。

vector <int*>システム要件のため、このマトリックスからを作成する必要があります。私はこれまでこれを試しました:

Mat _descriptors;
std::vector<int*> descriptors;
int row;
for (int i=0; i<_descriptors.rows;i++)
{
    row =(int) _descriptors.row(i).data;
    descriptors.push_back( & row );
}

これは正しいですか、それともこれのためのより良い方法がありますか?

4

2 に答える 2

4

のすべての値は、このコードを使用してスタック上descriptorsの変数を指します。row

opencvの定義を見ると、値Matrow戻ります。

// returns a new matrix header for the specified row
Mat row(int y) const;

ただし、データに直接アクセスし、_descriptors提供されたストライドメンバー変数を使用してステップ実行すると、機能するstepはずです。

Mat _descriptors;
std::vector<int*> descriptors;
for (int i=0; i<_descriptors.rows;i++)
{
    descriptors.push_back((int*)(_descriptors.data + i * _descriptors.step));
}
于 2013-01-11T12:15:28.530 に答える
0

vector の新しいオブジェクトを作成する場合、実際の値ではなくdescriptors、変数のアドレスを持つオブジェクトを作成しています。row値を保存するには、これが必要な場合、コードは次のようになります。

Mat _descriptors;
std::vector<int> descriptors;
int row;
for (int i=0; i<_descriptors.rows;i++)
{
    row =(int) _descriptors.row(i).data;
    descriptors.push_back( row );
}

も に変更vector<int*> descriptorsvector<int> descriptorsます。

于 2013-01-11T12:13:49.880 に答える