OpenCV 垫错误上的 SVM(训练数据必须是浮点矩阵)
SVM on OpenCV Mat Error (train data must be floating-point matrix)
我正在尝试使用OpenCV和SVM进行训练。但是我有一个问题,正是这个错误:
OpenCV Error: Bad argument (train data must be floating-point matrix) in cvCheckTrainData
我必须在图像数据集中进行训练,其中每个图像都有 68 个点 (X,Y),我用来执行 SVM。
一开始这是我的代码:
//for each image
fin_land.open(str_app); assert(fin_land);
for (int i=(0+(68*count_FOR)); i<(num_landCKplus+(68*count_FOR)); i++) {
fin_land >> f1;
fin_land >> f2;
int data[2] = {(int)f1, (int)f2};
Mat actual(1, 2, CV_32FC1, &data);
trainData.push_back(actual);
}
// SVM
CvSVMParams params;
params.svm_type = CvSVM::NU_SVC;
params.kernel_type = CvSVM::POLY;
trainData = trainData.reshape(1, #numImage);
SVM.train(trainData, trainLabels, Mat(), Mat(), params);
这段代码的问题在于,我想使用 Mat 进行 68 行和 2 列的测试,因为我的 SVM 中的每个培训课程都有 2 列,但我收到了此错误:
OpenCV Error: Incorrect size of input array (Input sample must be 1-dimensional vector) in cvPreparePredictData
如果我理解正确,问题是测试垫的维度只需要一个维度。所以,我想像这样修改我的代码:
//for each image
fin_land.open(str_app); assert(fin_land);
for (int i=(0+(68*count_FOR)); i<(num_landCKplus+(68*count_FOR)); i++) {
fin_land >> f1;
fin_land >> f1;
int data = (int)f1;
trainData.push_back(&data);
data = (int)f2;
trainData.push_back(&data);
}
现在每个培训课程只有一列,所以即使是测试垫,但我有一个新的错误,它说:
OpenCV Error: Bad argument (train data must be floating-point matrix) in cvCheckTrainData
问题是训练集的新垫的类型是错误的?我不知道如何解决它...
- 您需要浮点数据(和整数标签)
- 每个要素 1 行,每行 1 个标注。
float f1,f2;
for (int i=(0+(68*count_FOR)); i<(num_landCKplus+(68*count_FOR)); i++) {
fin_land >> f1;
fin_land >> f1;
trainData.push_back(f1); // pushing the 1st thing will determine the type of trainData
trainData.push_back(f2);
}
trainData = trainData.reshape(1, numItems);
SVM.train(trainData, trainLabels, Mat(), Mat(), params);
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 使用 char* 存储数据和产生的错误
- Static_cast转换为错误的数据类型,但结果仍然正确?
- 创建服务失败0x6f7存根收到错误数据
- 通过 host() 从 af::array 检索数据会导致错误的数据
- OpenCV C++ 3 维垫数据访问错误值
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 错误 - 自定义数据类型作为有效负载,带有提升::几何
- 类方法 - 数据结构中 For 循环的运行时错误
- 从文件中读取的数据,但发生核心转储错误
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 删除使数据处于"错误状态"的默认构造函数的模式?
- 服务器客户端通过原始数据错误C 发送接收结构
- 对象无法访问其私人数据.错误:在这种情况下私有
- SVM训练数据错误
- 库单元测试的覆盖率数据错误
- Unix套接字发送接收客户端到服务器大块数据错误
- 无法通过windows UDP套接字发送数据:错误代码10035
- 着色器存储缓冲区发送的数据错误