求解OpenCV Hog+SVM 实现的一些问题

Youn Shieh 2015-12-25 03:06:30
代码是在vs2013+opencv3.0下实现

#include "afx.h"
#include "opencv2/opencv.hpp"
#include "windows.h"
#include "fstream"
using namespace std;
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{

CvSVM svm = CvSVM();
svm.load("HOG_SVM_DATA.xml");//加载训练好的xml文件,这里训练的是10K个手写数字
//检测样本
IplImage *test;
char result[300]; //存放预测结果
test = cvLoadImage("5.bmp", 1); //待预测图片,用系统自带的画图工具随便手写
if (!test)
{
MessageBox(NULL,TEXT("待预测图像不存在!"),TEXT("提示"),MB_ICONWARNING);
return -1;
}
IplImage* trainTempImg=cvCreateImage(cvSize(28,28),8,3);
cvZero(trainTempImg);
cvResize(test,trainTempImg);
HOGDescriptor *hog=new HOGDescriptor(cvSize(28,28),cvSize(14,14),cvSize(7,7),cvSize(7,7),9);
vector<float>descriptors;//存放结果
hog->compute(trainTempImg, descriptors,Size(1,1), Size(0,0)); //Hog特征计算
cout<<"HOG dims: "<<descriptors.size()<<endl; //打印Hog特征维数 ,这里是324
CvMat* SVMtrainMat=cvCreateMat(1,descriptors.size(),CV_32FC1);
int n=0;
for(vector<float>::iterator iter=descriptors.begin();iter!=descriptors.end();iter++)
{
cvmSet(SVMtrainMat,0,n,*iter);
n++;
}

int ret = svm.predict(SVMtrainMat);//检测结果
sprintf(result, "%d\r\n",ret );
cvNamedWindow("dst",1);
cvShowImage("dst",test);
MessageBox(NULL,result,TEXT("预测结果"),MB_OK);
cvReleaseImage(&test);
cvReleaseImage(&trainTempImg);
return 0;
}





错误是 未定义标识符 "CvSVM" 和不存在从 "IplImage *" 转换到 "cv::_InputArray" 的适当构造函数。求解!
...全文
773 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
欧西特 2016-10-21
  • 打赏
  • 举报
回复
训练: cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create(); svm->setType(cv::ml::SVM::Types::C_SVC); svm->setKernel(cv::ml::SVM::KernelTypes::LINEAR); svm->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, 100, 1e-6)); svm->train(data_mat, cv::ml::SampleTypes::ROW_SAMPLE, res_mat); svm->save("D:/SVM.xml"); (注意,还有一个坑是opencv3.0和3.1中训练时label的Mat类型是CV_32SC1而不是CV_32FC1,否则训练时会出bug) 检测: cv::Ptr<cv::ml::SVM> svm= cv::ml::SVM::load<cv::ml::SVM>("D:/SVM.xml"); label=svm->predict(img_hog_vec);
qwert421 2016-04-05
  • 打赏
  • 举报
回复
引用 1 楼 xiji321 的回复:
3.0没有CvSVM类了
请问3.0 里应该怎么加载xml文件呀?谢谢
键盘王者 2016-03-29
  • 打赏
  • 举报
回复
Ptr<SVM> svm = SVM::create();
键盘王者 2016-03-29
  • 打赏
  • 举报
回复
3.0没有CvSVM类了

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧