c++ - 将一行 cv::Mat 转换为 int

标签 c++ opencv freak

我有一个来自 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 中的数据并使用提供的 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));
}

关于c++ - 将一行 cv::Mat 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14277858/

相关文章:

c++ - 在 Linux 中读取 double 时如何测试行尾

opencv - 无法将 xtion pro live 与 Ubuntu 12.04 连接

matlab - MATLAB 中的 BRISK 和 FREAK 描述符

c++ - 链接器错误(MEX 找不到 OpenCV 库)

python - 使用 Opencv Python 的 FREAK 描述符

OpenCV FREAK 对旋转/缩放不稳健

c++ - 包装 std::vector 类以使查询看起来像 .net List<T> 查询

c++ - 可以使用继承来减少 C++ 中编译代码的大小吗?

c++ - 调用 SymGetLineFromAddr64() 和 SymGetSymFromAddr64() WinAPI 函数后,我们得到什么地址?

Java OpenCV - 使用霍夫变换进行矩形检测