Конвертировать строку 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 );
}

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

2 ответа

Решение

Все значения в 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,

Другие вопросы по тегам