这里总结网上自己找到的资料,搞一个简单的框架供大家参考一下。
OpenCV官方的SVM代码在http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html
在http://blog.youkuaiyun.com/sangni007/article/details/7471222看到一段还不错的代码,结构清楚,虽然注释比较少,但很有参考价值,于是我添加了一些注释,看着更舒服。废话少说,直接上代码:
其中,关于HOG函数HOGDescriptor,见博客 http://blog.youkuaiyun.com/raocong2010/article/details/6239431
另外,自己需要把这个程序嵌入到另外一个工程中去,因为那里数据类型是Mat,不是cvMat,所以我又修改了上面的程序,并且图片大小也不是固定的64*64,需要自己设置一下图片大小,因为太懒,直接把改好的程序放过来:
就到这里吧,再整理一下思路。
如果运行的时候出现Link错误,有可能是没有附加依赖项,要添加opencv_objdetect230d.lib,我的OpenCV是2.3版本,所以这里是230.
============================================================================
以下是评论
10楼 thefutureisour 2012-11-21 17:04发表
for( string::size_type i = 0; i != img_path.size(); i++ )
string的size_type是用来确定是字符串的第几个字符的。
应该改为:
for( vector<string>::size_type i = 0; i != img_path.size(); i++ )
vector<string>的才是用来判断是vector的第几个元素的。
-
9楼
zh1262859995 2012-10-25 18:03发表
-
-
楼主,可不可给一个txt模板,TXT文本截图
-
Re:
司令 2012-11-09 12:52发表
-
-
回复zh1262859995:txt中就是 d:\img\1.jpg
这样的东西,用六楼的方法可以得到文件列表
-
-
8楼
XiangFeiDeXiong 2012-08-28 10:28发表
-
-
CvSVMParams params;
127. params.svm_type = CvSVM::C_SVC;
128. params.kernel_type = CvSVM::LINEAR;
我在做分类的时候用的这个,但是出现: error C2653: “CvSVM”: 不是类或命名空间名称
还请楼主赐教!-
Re:
司令 2012-08-29 09:50发表
-
- 回复XiangFeiDeXiong:CvSVM的头文件是ml.h,你要确认你包含了这个文件,你也可以再OpenCV里找到这个文件,我找了一下,看到里面确实有定义这个class,我用的OpenCV版本是2.3.1,另外,确认你有using namespace cv
-
-
7楼
XiangFeiDeXiong 2012-08-28 10:26发表
-
-
请问 CvSVM svm = CvSVM();
CvSVM是从哪里来的?也没瞧你包含相关头文件
-
6楼
xufeng150583 2012-08-24 19:53发表
-
-
请问一下楼主,您注释中说的通过批处理bat可以得到txt文档时如何得到的?
-
Re:
司令 2012-08-24 21:40发表
-
-
回复xufeng150583:新建一个txt文档,输入
dir /b/s/p/w *.jpg>train_list.txt
@pause
将文件后缀改为bat
-
-
5楼
yybing 2012-08-16 16:27发表
-
-
样本是怎么取的呢?要是检测人的时候,主把一个人的全身像扣下来?
-
Re:
司令 2012-08-20 15:55发表
-
-
回复yybing:......样本看你自己取的了,你训练了什么样子的样本,那么测试的时候就只能测试哪个样的。例如,如果你把人抠出来做样本训练,那么当你检测的时候你也必须要先把人从背景中抠出来然后再扔进去做检测。把人从背景中抠出来可以排除背景的干扰,但是抠得不准确反而适得其反。
-
Re:
yybing 2012-08-24 09:10发表
-
- 回复司令:和背景一块儿训练背景变了不是就也检测不出来了? Re: 司令 2012-08-24 10:30发表 [回复] [引用] [举报]回复yybing:对啊,如果你的训练样本中有没有把背景剔除掉,做检测的时候换了背景会有影响的,至于最终会有多大的影响就不好说了,如果你的训练样本够大,也许可以抵消掉这种影响。我现在做的东西就是觉得去背景太困难了,就连同背景一起训练了,最终效果也还好。 Re: yybing 2012-08-24 16:52发表 [回复] [引用] [举报]回复yongshengsilingsa:你用了GPU了吧?分辨率是多大的,这东东检测的时候速度太慢了吧,如果只用CPU。 Re: 司令 2012-08-24 16:56发表 [回复] [引用] [举报]回复yybing:从来没有用过GPU加速这种东西,也不用上,提取纹理的时候也许用的上。分辨率很低,图片最终大小差不多50*50
-
-
-
4楼
liuqingjiea 2012-08-08 19:51发表
-
-
想知道你训练得到的分类器有多大,能上百兆么,2千张样本的话。
-
Re:
司令 2012-08-12 15:04发表
-
- 回复liuqingjiea:如果正负总共两千样本的话,特征数目我用的是672,应该也就是最多几十兆吧,不会超过50M的,我目前用的正负样本总共有十万,特征向量维数是672,也就是160M
-
-
3楼
追风筝的猪 2012-07-10 13:21发表
-
- Mat():OpenCV Error:Bad arguments: <There is only a single class> in cvPreprocessCategoricalResponse,file..\..\..\src\opencv\modules\ml\src\inner_functions.cpp,line 729 是形参啥的传递错误还是怎样 请教下谢了~ Re: 司令 2012-07-16 14:06发表 [回复] [引用] [举报]回复lupnfer:这个,我也没法判断你的这个问题所在,应该是参数传统有问题,你点继续运行,看看调用堆栈哪里出错了。 Re: 追风筝的猪 2012-07-17 14:38发表 [回复] [引用] [举报]回复yongshengsilingsa:这个 已经解决了 就是图像类型的分类 必须是两种图像的 虽然我不是很懂为啥 但分成多个图像就 OK了 Re: zh1262859995 2012-10-26 14:27发表 [回复] [引用] [举报]回复lupnfer:图像类型的分类 必须是两种图像的,是什么意思?
-
2楼
loadstar_kun 2012-07-09 16:54发表
-
-
其实这个算是分类,不算检测
-
Re:
司令 2012-07-16 14:05发表
-
- 回复loadstar_kun:对,算是分类的,简单的二分类。
-