想实现一个SVM分类器,在网上找了好久,都不能编译,心态要崩了,下楼去跑了一会儿步,才恢复过来。最后找到了一个博客,实现成功了。
根据网上的教程,我复现了一遍,详见该博客https://blog.csdn.net/wf15725243865/article/details/80894132
这期间,我遇到了几个很蠢的问题。
1.一个项目下我编写了多个main函数,当然出错啦
2.别人博客上选取的图片是28*28的,我的图片大小是20*20的,对应的参数需要修改。
HOGDescriptor *hog=new HOGDescriptor(cvSize(20,20),cvSize(10,10),cvSize(5,5),cvSize(5,5),9);
里面的参数依此为WinSize,BlockSize,StrideSize,CellSize,
data_mat = cvCreateMat( nImgNum, 324, CV_32FC1 );
这一句中,第二个参数,即矩阵的列是由下面的descriptors的大小决定的,可以由descriptors.size()得到,且对于不同大小的输入训练图片,这个值是不同的,此处324=nbins*(blocksize.width/cellsize.width)*(blocksize.height/cellsize.height)*((winsize.width-blocksize.width)/blocksize.width+1)*((winsize.height-blocksize.height)/blocksize.height+1)=9*2*2*3*3
3.批量处理数据时我学到了新方法,虽然这种方法很多哈,但我这个菜鸡以前没做过不会呀。具体是在图片文件夹下运行cmd,进入命令提示符,cd f:,进入相应文件夹,输入dir /b > test.txt 可生成图片名的文件,将最后一行删掉。用notepad++软件给图片名前面加上路径,编辑>列块编辑>添加路径,即可在每一行前面加上路径,每一行后面添加可以使用如下方法:使用快捷键CTRL+F替换功能,点击正则表达式,将$(每行的结尾)替换成"需要添加的内容",将^(每行开头)替换为“想添加的内容”。间隔添加空行,可将\n替换为\n\n;我还遇到一个很蠢的问题,需要在偶数空白行添加标签,我只能先将\n替换为\n0,将0F替换为F
希望自己继续坚持吧!
具体程序如下:
//#include "stdafx.h"
#include