我正在尝试使用OpenCV中的SVM加载函数加载.xml文件,然后使用predict函数对交通标志进行分类。当达到预测函数的执行时,抛出错误:
Unhandled exception at 0x00007FFE88E54008 in LicentaFunctii.exe: Microsoft C++ exception: cv::Exception at memory location 0x00000025658FD0C0.
在控制台中会记录以下消息:
OpenCV Error: Assertion failed (samples.cols == var_count && samples.type()== 5) in cv::ml::SVMImpl::predict, file C:\build\master_winpack-build-win64-
vc14\opencv\modules\ml\src\svm.cpp, line 2005
这是xml行中的前24行:
<?xml version="1.0"?>
<opencv_storage>
<opencv_ml_svm>
<format>3</format>
<svmType>C_SVC</svmType>
<kernel>
<type>LINEAR</type></kernel>
<C>15.</C>
<term_criteria><epsilon>1.0000000000000000e-02</epsilon>
<iterations>1000</iterations></term_criteria>
<var_count>3600</var_count>
<class_count>7</class_count>
<class_labels type_id="opencv-matrix">
<rows>7</rows>
<cols>1</cols>
<dt>i</dt>
<data>
0 1 2 3 4 5 6</data></class_labels>
<sv_total>21</sv_total>
<support_vectors>
<_>
1.06024239e-02 4.48197760e-02 -4.58896300e-03 -2.43553445e-02
-7.37148002e-02 -1.85971316e-02 -1.32155744e-02 -1.38255786e-02
-3.20396386e-02 8.21578354e-02 7.99100101e-02 -1.21739525e-02
以下代码用于从xml文件加载训练数据:
Ptr<SVM> svm = SVM::create();
svm->load("Images/trainedImages.xml");
注意:我使用的是OpenCV 3.4.0版本。
有人可以就此问题提出建议吗?
编辑1: 似乎加载像这样的训练文件将起作用:
Ptr<SVM> svm = SVM::create();
svm = SVM::load("Images/trainedImages.xml");
答案 0 :(得分:2)
似乎可以像这样加载经过训练的文件:
Ptr<SVM> svm = SVM::create();
svm = SVM::load("Images/trainedImages.xml");