Конвертировать строку cv :: Mat в int

У меня есть матрица дескрипторов извлечения описания 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 );
}

Это правильно или есть лучший способ для этого?

6

Решение

Все значения в 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));
}
4

Другие решения

Когда вы создаете новый объект для вектора 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,

0

По вопросам рекламы [email protected]