У меня есть матрица дескрипторов извлечения описания 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 );
}
Это правильно или есть лучший способ для этого?
Все значения в descriptors
будет указывать на переменную row
в стеке с этим кодом.
Глядя на определение OpenCV Mat
, row
возвращает по значению:
// 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));
}
Когда вы создаете новый объект для вектора 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*> descriptors
в vector<int> descriptors
,