训练 SVM 并使用 OpenCV 3.0 保存它
Train SVM and save it with OpenCV 3.0
我正在使用Visual Studio 2010和OpenCV 3.0。我正在尝试训练 SVM 并将其保存到文件中,但我遇到了问题。
我的目的是提取一些图像的 HOG 特征并用它们训练 SVM。一切似乎都是正确的,但是当我尝试将模型保存在xml文件中时,出现以下错误:
TrainSVM.exe 中 0x000007fefd9bb16d (KernelBase.dll) 中的未处理异常:Exception de MICROSOFT C++: cv::Exception at memory location 0x0026e1b0.
然后这显示在控制台中:
OpenCV 错误:解析错误(SVM 模型数据无效,检查sv_count,var_* d class_count 标签) in cv::ml::SVMImpl::write, 文件 C:\builds\master_PackSlave-w in64-VC12-shared\OpenCV\modules\ML\SRC\SVM.cpp,第 2027 行
当 SVM 未正确训练时,似乎会出现错误,但我不明白我在哪里失败了,因为该行
svm->train(auxResult)
结果为"真"。
我已经检查了图像并且它们已正确加载,有人可以帮助我吗?
提前谢谢。
这是代码:
String imagesPathPos = "Positivas/*.jpg"; // it has filters, too !
vector<String> fp;
glob(imagesPathPos, fp);
int tamaño = fp.size();
std::vector<cv::Point> positions;
positions.push_back(cv::Point(0,0));
std::vector<float> descriptor;
Ptr<TrainData> auxResult;
for (size_t i=0; i<fp.size(); ++i)
{
string nameFile = fp[i];
Mat img = imread(fp[i]);
cv::Mat grayImg;
cvtColor( img, grayImg, COLOR_BGR2GRAY );
hog.compute(grayImg,descriptor,winStride,trainingPadding,positions);
Mat auxDescriptor = cv::Mat(descriptor);
Mat descriptorMat(1,auxDescriptor.rows,CV_32FC1);
transpose(auxDescriptor, descriptorMat);
trainingData.push_back(descriptorMat);
trainingLabels.push_back(labelPositive);
}
String imagesPathNeg = "Negativas/*.jpg";
vector<String> fn;
glob(imagesPathNeg, fn, true);
for (size_t i=0; i<fn.size(); i++)
{
Mat img = imread(fn[i]);
cv::Mat grayImg;
cvtColor( img, grayImg, COLOR_BGR2GRAY );
hog.compute(grayImg,descriptor,Size(),Size(),positions);
Mat auxDescriptor = cv::Mat(descriptor);
Mat descriptorMat(1,auxDescriptor.rows,CV_32FC1);
transpose(auxDescriptor, descriptorMat);
trainingData.push_back(descriptorMat);
trainingLabels.push_back(labelPositive);
}
auxResult = TrainData::create(trainingData, type, trainingLabels);
svm->train(auxResult);
svm->save("output.xml");
即使图像是负的,您也在定义"labelPositive"。错误可能存在于通过向量 fn 的循环中:
trainingLabels.push_back(标签阳性);
您应该使用定义为 -1 的名为"labelNegative"的参数。
相关文章:
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 无法从Java读取C++中保存的Opencv Mat映像
- 在opencv c++目录中从/加载/保存多个图像
- 如果我想通过OpenCV dnn模块加载PyTorch的模型,我应该如何保存它
- OpenCV imwrite不会保存图像
- 如何将捕获的图像存储在OpenCV中(将图片保存到计算机)
- 有没有办法拿一个opencv显示窗口并将其保存到GUI窗口?
- 对 OpenCV C++ 程序进行单元测试,该程序拍摄照片并将其保存到文件中
- Opencv 保存视频
- 我想将 OpenCV 中处理后的图像保存为“input_name+enhanced.input_image_format
- OpenCV - 在矢量<Mat>中保存垫子
- 在Ubuntu中使用VideOwriter(OpenCV)保存视频作为MP4时出错
- 无法将图像保存在具有白色背景的JPG中 OpenCV
- 将 OpenCV MAT 保存到 TXT 文件作为不带分隔符的十六进制值
- OpenCV 4.0 无法保存视频
- 视频编写器功能不会使用 OpenCV-3.0.0 保存文件
- 无法使用cv :: imwrite保存垫子图像在JNI本机代码OPENCV中
- OPENCV IMWRITE保存黑色PNG
- 使用 OpenCV 保存 .pgm 图像时出错
- 保存 OpenCV 上 Hough Circle 检测到的圆圈内的内容