OpenCV断言失败-convertTo

OpenCV Assertion failed - convertTo

本文关键字:-convertTo 失败 断言 OpenCV      更新时间:2023-10-16

我正试图将矩阵转换为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方法

    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
...
}

谢谢你的帮助。

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

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

Eyes.features是什么类型的?看起来它应该已经是一个Mat1f了。但是,你确定features.push_back能按预期工作吗?似乎push_back需要一个const Mat& 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);