我有一个来自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 );
}
Run Code Online (Sandbox Code Playgroud)
这是正确的还是有更好的方法?
中的所有值都descriptors将指向row具有此代码的堆栈上的变量。
查看 opencv 的定义Mat,row按值返回:
// returns a new matrix header for the specified row
Mat row(int y) const;
Run Code Online (Sandbox Code Playgroud)
但是,直接访问数据_descriptors并使用提供的 stride 成员变量步进应该可以工作:step
Mat _descriptors;
std::vector<int*> descriptors;
for (int i=0; i<_descriptors.rows;i++)
{
descriptors.push_back((int*)(_descriptors.data + i * _descriptors.step));
}
Run Code Online (Sandbox Code Playgroud)