【发布时间】:2013-05-28 10:28:24
【问题描述】:
我有一个包含 JPG 格式的正片和另一个负片图像的文件夹,我想根据这些图像训练一个 SVM,我已经完成了以下操作,但收到一个错误:
Mat classes = new Mat();
Mat trainingData = new Mat();
Mat trainingImages = new Mat();
Mat trainingLabels = new Mat();
CvSVM clasificador;
for (File file : new File(path + "positives/").listFiles()) {
Mat img = Highgui.imread(file.getAbsolutePath());
img.reshape(1, 1);
trainingImages.push_back(img);
trainingLabels.push_back(Mat.ones(new Size(1, 1), CvType.CV_32FC1));
}
for (File file : new File(path + "negatives/").listFiles()) {
Mat img = Highgui.imread(file.getAbsolutePath());
img.reshape(1, 1);
trainingImages.push_back(img);
trainingLabels.push_back(Mat.zeros(new Size(1, 1), CvType.CV_32FC1));
}
trainingImages.copyTo(trainingData);
trainingData.convertTo(trainingData, CvType.CV_32FC1);
trainingLabels.copyTo(classes);
CvSVMParams params = new CvSVMParams();
params.set_kernel_type(CvSVM.LINEAR);
clasificador = new CvSVM(trainingData, classes, new Mat(), new Mat(), params);
当我尝试运行时,我得到:
OpenCV Error: Bad argument (train data must be floating-point matrix) in cvCheckTrainData, file ..\..\..\src\opencv\modules\ml\src\inner_functions.cpp, line 857
Exception in thread "main" CvException [org.opencv.core.CvException: ..\..\..\src\opencv\modules\ml\src\inner_functions.cpp:857: error: (-5) train data must be floating-point matrix in function cvCheckTrainData
]
at org.opencv.ml.CvSVM.CvSVM_1(Native Method)
at org.opencv.ml.CvSVM.<init>(CvSVM.java:80)
我无法训练 SVM,知道吗?谢谢
【问题讨论】:
-
我正在尝试根据我已经获得的 segmets 对车牌进行分类,我的代码基于此示例:github.com/MasteringOpenCV/code/blob/master/…
-
您是否尝试过使用 CV_64F?为了绝对确定,您是否在
trainingData被传递到 CvSVM 之前检查了它的类型? -
感谢@morynicz,'CvType.typeToString(trainingData.type())' 将返回“CV_32FC3”.. 还尝试转换为 CV_64F 时出现相同的错误