如何将 vector<...> 转换为 cv::Mat?



具有vector<Descriptor> m_keyDescs

描述符指定为:

Descriptor(float x, float y, vector<double> const& f)
{
    xi = x;
    yi = y;
    fv = f;
}

推送方式:

m_keyDescs.push_back(Descriptor(descxi, descyi, fv));

如何将此矢量转换为cv::Mat?

我试过

descriptors_scene = cv::Mat(m_keyDescs).reshape(1);

项目调试没有错误,但当它运行时,在我的mac上的Qt Creator中出现错误:

测试意外退出单击"重新打开"以再次打开应用程序。

您无法将手动定义类的向量直接转换为Mat。例如,OpenCV不知道将每个元素放在哪里,并且元素甚至不是相同的变量类型(第三个甚至不是单个元素,因此它不可能是Mat中的元素)。但是,例如,可以将int或float的向量直接转换为Mat。请在此处查看答案中的更多信息。

#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
class Descriptor {
public:
  float xi;
  float yi;
  vector< double > fv;
  Descriptor(float x, float y, vector<double> const& f) :
    xi(x), yi(y), fv(f){}
};
int main(int argc, char** argv) {
  vector<Descriptor> m_keyDescs;
  for (int i = 0; i < 10; i++) {
    vector<double> f(10, 23);
    m_keyDescs.push_back(Descriptor(i+3, i+5, f));
  }
  Mat_<Descriptor> mymat(1, m_keyDescs.size(), &m_keyDescs[0], sizeof(Descriptor));
  for (int i = 0; i < 10; i++) {
    Descriptor d = mymat(0, i);
    cout << "xi:" << d.xi << ", yi:" << d.yi << ", fv:[";
    for (int j = 0; j < d.fv.size(); j++)
      cout << d.fv[j] << ", ";
    cout << "]" << endl;
  }
}

相关内容

  • 没有找到相关文章

最新更新