【问题标题】:OpenCV Assertion failed - convertToOpenCV 断言失败 - convertTo
【发布时间】:2015-09-12 13:14:46
【问题描述】:

我正在尝试将我的矩阵转换为 CV_32FC1 来训练我的 SVM。我总是收到错误消息:

OpenCV Error: Assertion failed (func != 0) in convertTo, file /opt/opencv/modules/core/src/convert.cpp, line 1115
/eropt/opencv/modules/core/src/convert.cpp:1115: error: (-215) func != 0 in function convtTo

基本上我正在尝试

Mat eyes_train_data = Mat::zeros(Eyes.features.size(), CV_32FC1);
Eyes.features.copyTo(eyes_train_data);
eyes_train_data.convertTo(eyes_train_data, CV_32FC1);

我已经尝试获取返回7 的矩阵的depth()。我不确定那是什么意思。 Eyes.features 矩阵是(或应该是)浮点矩阵

要获得Eyes.features,我使用了带有

的 gotHogFeatures-Method
    vector<float> descriptorsValues;
    vector<Point> location;
    for( Mat patch : patches) {
      hog.compute( patch, descriptorsValues, Size(0,0), Size(0,0),   location);
        features.push_back(descriptorsValues); 
 }

descriptorValues 表示行向量,特征应该如下所示:

features: 
{
descriptorValues0
descriptorValues1
...
}

感谢您的帮助。

【问题讨论】:

  • 什么是 Eyes.type()?
  • Eyes.features 是 Mat 类型; Eyes 只是 typedef 结构 TrainingData Eyes
  • 和 Eyes.features.type() 结果到7
  • 您可以尝试转换为 CV_64FC1 吗?如果源已经具有所需的类型,则转换可能会失败

标签: c++ opencv matrix vector svm


【解决方案1】:

您的转换代码似乎不正确。 它应该是这样的:

Mat eyes_train_data;
eyes_train_data.convertTo(eyes_train_data, CV_32FC1);

Eyes.features 的类型是什么? 看来应该已经是Mat1f了。但是,您确定features.push_back 按预期工作吗?看来push_back 需要const Mat&amp; m

你可以从一个向量中得到一个行矩阵:

Mat1f m;
vector<float> v1 = {1.f, 1.5f, 2.1f};
vector<float> v2 = {3.f, 3.5f, 4.1f};

Mat temp1(Mat1f(v1).t());
Mat temp2(Mat1f(v2).t());

m.push_back(temp1);
m.push_back(temp2);

【讨论】:

  • 好的。如何将 vector 转换为 Mat& m (行向量)并在此之后推送它?
猜你喜欢
  • 1970-01-01
  • 2014-02-10
  • 2012-11-26
  • 2014-11-24
  • 2014-05-28
  • 2020-12-31
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多