我正在尝试将一些代码从使用OpenCV的CvMat转换为Mat但是在使用指针时遇到了一些麻烦。
这是原始代码:
CvMat *m_projectedTrainFaceMat;
float d_i;
i = 0;
d_i = projectTestFace[i] - m_projectedTrainFaceMat->data.fl[iTrain * m_nEigens + i];
这是我更新的代码:
Mat *m_projectedTrainFaceMat;
float d_i;
i = 0;
d_i = projectTestFace[i] - m_projectedTrainFaceMat->data[iTrain * m_nEigens + i];
正如您所看到的,我从调用数据中删除了.fl但我无法弄清楚如何将数据作为浮点数返回。
有什么建议吗?我尝试将它转换为浮动和(浮动*),但最终导致错误/错误。
e:projectTestFace是一个浮动*。
答案 0 :(得分:1)
上面的安德烈代码是正确的,假设您的内存是连续的。有些情况不是,我们不应该假设。也许更简单的方法(不必使用指针)如下:
d_i = projectTestFace[i] - (*m_projectedTrainFaceMat).at<float>(row, col);
与Andrey类似,我假设您的m_projectedTrainFaceMat初始化为具有CV_32FC1元素。