opencv训练支持向量机的警告 5C

代码如下:

#include <stdio.h>  
#include <time.h>  
#include <opencv2/opencv.hpp>  
#include <opencv/cv.h>  
#include <iostream> 
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2/ml/ml.hpp>  
#include <io.h>

using namespace std;
using namespace cv;

void getFiles( string path, vector<string>& files);
void get_1(Mat& trainingImages, vector<int>& trainingLabels);
void get_0(Mat& trainingImages, vector<int>& trainingLabels);

int main()
{
    //获取训练数据
    Mat classes;
    Mat trainingData;
    Mat trainingImages;
    vector<int> trainingLabels;
    get_1(trainingImages, trainingLabels);
    get_0(trainingImages, trainingLabels);
    Mat(trainingImages).copyTo(trainingData);
    trainingData.convertTo(trainingData, CV_32FC1);
    Mat(trainingLabels).copyTo(classes);
    //配置SVM训练器参数
    CvSVMParams SVM_params;
    SVM_params.svm_type = CvSVM::C_SVC;
    SVM_params.kernel_type = CvSVM::LINEAR; 
    SVM_params.degree = 0;
    SVM_params.gamma = 1;
    SVM_params.coef0 = 0;
    SVM_params.C = 1;
    SVM_params.nu = 0;
    SVM_params.p = 0;
    SVM_params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 1000, 0.01);
    //训练
    CvSVM svm;
    svm.train(trainingData, classes, Mat(), Mat(), SVM_params);
    //保存模型
    svm.save("svm.xml");
    cout<<"训练好了!!!"<<endl;
    getchar();
    return 0;
}
void getFiles( string path, vector<string>& files )  
{  
    long   hFile   =   0;  
    struct _finddata_t fileinfo;  
    string p;  
    if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) !=  -1)  
    {  
        do  
        {  
            if((fileinfo.attrib &  _A_SUBDIR))  
            {  
                if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)  
                    getFiles( p.assign(path).append("\\").append(fileinfo.name), files );  
            }  
            else  
            {  
                files.push_back(p.assign(path).append("\\").append(fileinfo.name) );  
            }  
        }while(_findnext(hFile, &fileinfo)  == 0);  

        _findclose(hFile);  
    }  
} 
void get_1(Mat& trainingImages, vector<int>& trainingLabels)
{
    char * filePath = "D:\\hog1\\pos\\pic"; 
    vector<string> files;  
    getFiles(filePath, files );  
    int number = files.size();  
    for (int i = 0;i < number;i++)  
    {  
        Mat  SrcImage=imread(files[i].c_str());
        SrcImage= SrcImage.reshape(1, 1);
        trainingImages.push_back(SrcImage);
        trainingLabels.push_back(1);
    }  
}
void get_0(Mat& trainingImages, vector<int>& trainingLabels)
{
    char * filePath = "D:\\hog1\\neg"; 
    vector<string> files;  
    getFiles(filePath, files );  
    int number = files.size();  
    for (int i = 0;i < number;i++)  
    {  
        Mat  SrcImage=imread(files[i].c_str());
        SrcImage= SrcImage.reshape(1, 1);
        trainingImages.push_back(SrcImage);
        trainingLabels.push_back(0);
    }  
}

直接填入正负样本图片路径会出现以下错误:
图片说明

该如何解决?是不是应该输入的是正负样本图片的HOG描述子而不是原图片?

0

2个回答

0

Mat SrcImage=imread(files[i].c_str(),0);
读取灰度图吧,好像

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
OpenCV 支持向量机
支持向量机 (SVM) 是一个类分类器,正式的定义是一个能够将不同类样本在样本空间分隔的超平面。给定一些标记好的训练样本 (监督式学习), SVM算法输出一个最优化的分隔超平面。 假设给定一些分属于两类的2维点,这些点可以通过直线分割, 我们要找到一条最优的分割线.距离样本太近的直线不是最优的,因为这样的直线对噪声敏感度高,泛化性较差。 因此我们的目标是找到一条直线,离所有点的距离最远。 由此,
支持向量机及其训练算法
支持向量机及其训练算法支持向量机及其训练算法支持向量机及其训练算法
支持向量机训练算法svm
关于支持向量机的论文,可以作为入门的知识。
支持向量机训练程序
支持向量机训练的源程序安装包,用于支持向量机 的训练
支持向量机训练算法研究
本文研究支持向量机训练中样本集分布的几何特征,在不影响分类性能的前提下,提出一种适合大样本集训练的 QuasiChoosing(QC)算法。
基于支持向量机的训练部分
基于支持向量机的数字识别的训练部分的程序的代码
opencv训练
介绍怎么用opencv训练并且开发出识别的XML文件,实现人脸识别等。
OpenCV 3.1.0支持向量机SVM
支持向量机是20世纪90年代中期发展起来的基于统计学习理论的一种机器学习方法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,也能获得良好统计规律的目的。它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。
【opencv】支持向量机CvSVM分类
有关于SVM的理论可以参考opencv_tutorials.pdf 译文可以参考博客: http://blog.csdn.net/dwb1015/article/details/12841305本文通过svm进行多类分类 源码如下://编程环境:VS2012 + Opencv2.4.9 #include <fstream> #include <iostream> #include <openc
opencv机器学习支持向量机分类程序
svm向量机分类程序,附源代码,欢迎下载
支持向量机训练算法的研究与优化
很不错的资料 关于支持向量机算法方面的论文 很有参考的价值
OpenCV机器学习SVM支持向量机的分类程序
OpenCV机器学习SVM支持向量机的分类程序,便于SVM的学习和理解
opencv笔记(12):支持向量机-SVM
支持向量机-SVM 支持向量机(Support Vector Machine,SVM)是一种对线性和非线性数据进行分类的方法,通过寻找最大边缘超平面将数据分类。 支持向量机比较其他传统机器学习算法的优点: 小样本,SVM解决问题的时候,和样本的维度是无关的,只与落在超平面边缘的侧面的支持向量有关。结构风险最小,对问题真实模型的逼近与问题真实解之间的误差,就叫做风险,更严格的说
opencv对支持向量机算法实现的源代码
opencv对线性支持向量机算法实现的源代码,配置opencv,在vs2010开发环境中运行
opencv 的haar特征的adaboo训练
我想请问一下,用opencv的haartraining.exe训练过文件以后,下面会生成很多训练等级文件夹,每个文件夹下面都有一个txt文件,请问一下我如何生成一个.xml文件啊,看网上介绍说用convert_cascade.exe这个文件,我用了这个编译文件,但是没有生成啊.xml啊,还有下面不是有很多文件夹吗,如何将这么多文件夹下的txt生成一个.xml啊,
opencv训练图像
opencv训练自己的xml文件时,所需图像资源,包含正负样本图像。
opencv svm训练问题
编写了个svm代码,但是运行到train那步就出错,求大神告知错误原因,非常感谢!rn#includern#includern#includernusing namespace std;rnusing namespace cv;rnusing namespace cv::ml;rnrnint r=10,last_x=0,last_y=0,drawing=0;rnMat asd(512, 512, CV_8UC1), clean_asd;rnvoid draw(int x, int y)rnrn circle(asd, Point(x, y), r, Scalar(0, 0, 0), -1, 8);rn asd.copyTo(clean_asd);rn imshow("手写板", clean_asd);rnrnvoid drawCursor(int x, int y)rnrn asd.copyTo(clean_asd);rn circle(clean_asd, Point(x, y), r, Scalar(0, 0, 0), -1, 8);rnrnvoid on_mouse(int event, int x, int y, int flags, void* param)rnrn last_x = x;rn last_y = y;rn drawCursor(x, y);rn //Select mouse Eventrn if (event == CV_EVENT_LBUTTONDOWN)rn rn drawing = 1;rn draw(x, y);rn rn else if (event == CV_EVENT_LBUTTONUP)rn rn drawing = 0;rn rn else if (event == CV_EVENT_MOUSEMOVE && flags & CV_EVENT_FLAG_LBUTTON)rn rn if (drawing)rn draw(x, y);rn rnrnint xmax = 0, xmin = 0;rnvoid findx(Mat src)rnrn int i, j,k,a=0,minfind = 0;rn Mat dst = src.clone();rn threshold(dst, dst, 128, 255, THRESH_BINARY_INV);rn for (i = 0; i < dst.cols; i++)rn rn for (j = 0; j < dst.rows; j++)rn rn uchar* data = dst.ptr(j);rn a += data[i];rn rn if (a>1)rn rn xmax = i;rn if (!minfind)rn rn xmin = i;rn minfind = 1;rn rn rn a = 0;rn rnrnint ymax = 0, ymin = 0;rnvoid findy(Mat src)rnrn int i, j, a = 0, minfind = 0;rn Mat dst = src.clone();rn threshold(dst, dst, 128, 255, THRESH_BINARY_INV);rn for (i = 0; i < dst.rows; i++)rn rn uchar* data = dst.ptr(i);rn for (j = 0; j < dst.cols; j++)rn rn a += data[j];rn rn if (a>1)rn rn ymax = i;rn if (!minfind)rn rn ymin = i;rn minfind = 1;rn rn rn a = 0;rn rnrnint xrange, yrange;rnvoid findrect(Mat src)rnrn rn findx(src);rn findy(src);rn xrange = xmax - xmin;rn yrange = ymax - ymin;rnrnMat data[10];rnstring fname[] = "C:\\Users\\shinelon\\Desktop\\数字\\数字\\OCR\\0\\*.pbm", "C:\\Users\\shinelon\\Desktop\\数字\\数字\\OCR\\1\\*.pbm",rn"C:\\Users\\shinelon\\Desktop\\数字\\数字\\OCR\\2\\*.pbm" ,"C:\\Users\\shinelon\\Desktop\\数字\\数字\\OCR\\3\\*.pbm",rn"C:\\Users\\shinelon\\Desktop\\数字\\数字\\OCR\\4\\*.pbm" ,"C:\\Users\\shinelon\\Desktop\\数字\\数字\\OCR\\5\\*.pbm",rn"C:\\Users\\shinelon\\Desktop\\数字\\数字\\OCR\\6\\*.pbm" ,"C:\\Users\\shinelon\\Desktop\\数字\\数字\\OCR\\7\\*.pbm",rn"C:\\Users\\shinelon\\Desktop\\数字\\数字\\OCR\\8\\*.pbm" ,"C:\\Users\\shinelon\\Desktop\\数字\\数字\\OCR\\9\\*.pbm" ;rnvoid read(void)rnrn vector files;rn int i,j;rn for (j = 0; j < 10; j++)rn rn glob(fname[j], files, false);rn for (i = 0; i < files.size(); i++)rn rn Mat test = imread(files[i]);rn data[j].push_back(test);rn rn rnrnvoid getTrainData(Mat *_train_data, Mat *_train_label)rnrn int i, j, k;rn vector files;rn _train_data->release();//清零rn _train_label->release();//清零rn for (j = 0; j < 10; j++)rn rn glob(fname[j], files, false);rn for (i = 0; i < files.size(); i++)rn rn Mat test = imread(files[i],0);//128*128rn _train_data->push_back(test.reshape(0, 1));//reshape第一个为通道数,0表示不变,第二个为行数,0表示不变rn rn rn int buf[11] = 0,1,2,3,4,5,6,7,8,9;rn for (j = 0; j < 10; j++)rn rn for (i = 0; i < 100; i++)rn rn _train_label->push_back(buf[j]);rn rn rnrnMat dst(128, 128, CV_32SC1);rnvoid svm()rnrn Mat train_data, train_label;rn getTrainData(&train_data, &train_label); //获取样本训练数据rn train_data.convertTo(train_data, CV_32SC1);rn train_label.convertTo(train_label, CV_32SC1);rn Mat train_data2 = Mat::ones(1000, 3, CV_32SC1);rn // 设置训练数据rn Ptr tData = TrainData::create(train_data, ROW_SAMPLE, train_label);rn rn // 设置参数rn Ptr model = SVM::create();rn model->setType(SVM::C_SVC);rn model->setKernel(SVM::LINEAR);rnrn model->setC(1);rn rn model->train(tData);rnrnrnint main()rnrn Mat image(512, 512, CV_8UC1);rn namedWindow("手写板", WINDOW_AUTOSIZE);rn asd = Scalar::all(255);rn asd.copyTo(clean_asd);rn setMouseCallback("手写板",on_mouse,0);rn while (1)rn rn char c;rn imshow("手写板", clean_asd);rn c=waitKey(10);rn if(c==27)rn break;rn else if (c=='r')rn rn asd = Scalar::all(255);rn drawCursor(last_x, last_y);rn rn else if (c=='='||c=='+')rn rn r++;rn drawCursor(last_x, last_y);rn rn else if ((c=='-')&&(r>1))rn rn r--;rn drawCursor(last_x, last_y);rn rn else if (c == 'a')rn rn findrect(clean_asd);rn image = clean_asd( Range(ymin, ymin + yrange),Range(xmin, xmin + xrange));rn resize(image, dst, dst.size());rn dst = dst.reshape(0, 1);rn svm();rn namedWindow("asd", WINDOW_AUTOSIZE);rn imshow("asd", dst);rn rn rn return 0;rn
opencv haartraining训练
在人脸检测与五官定位上我采用OPENCV的haartraining进行定位,这里介绍下这两天我学习的如何用opencv训练自己的分类器。在这两天的学习里,我遇到了不少问题,不过我遇到了几个好心的大侠帮我解决了不少问题,特别是无忌,在这里我再次感谢他的帮助。
opencv下adaboost训练问题
最近在学习adaboost训练,但是看到opencv的根目录下我看到objdetect里面定义了CascadeClassifier这个类,然后直接用它的load加载模型,detectMultiScale检测人脸之类的目标就行了,这个类里面没有train。rnrnrn但是我在opencv下面的apps的文件夹里看到有个traincascade的文件夹,看到CascadeClassifier.h定义了一个CvCascadeClassifier的类,跟CascadeClassifier就差两个字,但里面内容完全不同了,这个类下面有train训练函数,这俩类有什么区别吗,我要是自己训练的时候,调用CvCascadeBoost 的train,还是CvCascadeClassifier的train呢,总感觉CvCascadeClassifier和CascadeClassifier是一个的啊,但是内容差那么多,不知道这个区别是什么rnrn我想用opencv的adaboost训练,不知道该调用哪个文件,怎样训练,请指教,哪位大牛有现成的程序和操作说明的话能给我share一下吗?谢谢 小弟邮箱284069003@qq.comrn
opencv bow训练出错
我有12000幅图像,其中10800张用来做训练,用opencv的bow类计算出100个聚类中心。rn但是到Mat dictionary = bowTrain.cluster();时提示出错:rn[img=https://img-bbs.csdn.net/upload/201309/11/1378884345_428949.png][/img]rn由于opencv的源码我暂时不会跟进去调试,所以不知道错在哪里了,有做过的人希望帮我看看是怎么回事。谢谢啦!rnint main()rnrnconst int pairNum = 6000;rnconst int trainPairNum = 5400;rnconst int testPairNum = 600;rnifstream inImg("pairs.txt",ios::in);rnvectorimg;rnstring path;rnMat temImg;rnsize_t i,j,k;rnfor (i=0;ikey;rnMat descriptor;rnPtr detector = FeatureDetector::create("ORB");rndetector->detect(img[i] , key);rnrnPtr extrator = DescriptorExtractor::create("ORB");rnextrator->compute(img[i], key, descriptor);rnrnbowTrain.add( descriptor );rnrn//diffpairrnfor (i=6000; ikey;rnMat descriptor;rnPtr detector = FeatureDetector::create("ORB");rndetector->detect(img[i] , key);rnrnPtr extrator = DescriptorExtractor::create("ORB");rnextrator->compute(img[i], key, descriptor);rnrnbowTrain.add( descriptor );rnrnrnMat dictionary = bowTrain.cluster();rnrnrnrn
opencv脸部识别训练结果
opencv脸部识别训练结果。使用时将相应的xml文件读入就可以了。但是识别效果感觉比较差,只有整个头都在图中才有比较好的识别效果
opencv 训练 xml文件 haar
通过LBP训练15小时出来的xml文件,用70000个人脸素材和10000个反面素材训练出来的,供大家学习使用准确率很高
OpenCV训练自己的分类器
利用opencv训练自己的分类器,可以训练人脸的,行人的等
opencv训练舌头分类器
2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...
用OpenCV训练级联分类器
opencv训练级联分类器
opencv haar 训练总结
1、创建正样本: opencv_createsamples -info info.txt -vec samples.vec -w 20 -h 20 这里的-info 可以用txt文件,储存着每一个正样本的信息,info.txt的格式例子如下: /Users/tyson/Desktop/robomaster/haar_training/rawdata/1.bmp 1 102 37 252 340
opencv训练xml的过程
废话不多说,此文章适合会一点点cmd的人及以上,只讲解一些本人的重要步骤和遇到的问题,做过一次后发现很简单 第一步:从网上下载正样本,负样本,我使用了python 脚本到百度图片下载了正样本500来张,负样本1200来张。 按照网上的过程把正样本放在pos文件夹下,负样本放在neg文件夹下 第二步:在windows下使用dir /b pos pos\pos.txt 生成pos.txt文件,使...
opencv训练自己的分类器
注意点1.建立正负样本的时候,负样本需要一起归一化,灰度处理而且负样本是正样本1.2到1.5倍比较好,这里自己写了一个 点2.正负样本的描述文件,先将正样本放在一个文件夹内通过命令提示符cd进正样本的文件夹内 dir/b>positive.txt positive。txt是生成的文件,然后修改。txt文件删除最后一行,并且将最后一个单词例如。jpg全部替换成1 0 0 20 20 (文件数,起始
opencv 的knn的训练数据
这是opencv附属程序的训练数据
boost训练_opencv
详细介绍了opencv中关于boost训练的源码,这里是基于决策树进行的
opencv人脸识别训练
一开始我运用人脸库训练出一个xml文件,后来新增人脸时候需要将新人继续拿来训练,需要将训练的特征信息加在原来xml文件里面。如果程序不关闭是可以将新人特征信息加到xml文件里的。比如,原来的xml文件为face.xml;现在采集了一些人脸,需要将这些人脸的特征信息提取加入到face.cml;然后下次load这个face.xml进行人脸识别。现在就是怎么将这些人脸加入原来的xml文件呢? 这个是全
《OpenCV训练级联分类器》
我是个初学者,我只想把我所学到经验分享一下,不好勿喷。 一.寻找传说中的opencv_traincascade.exe和opencv_createsamples.exe opencv里自带了opencv_traincascade.exe,opencv_createsamples.exe这两个东东,找出来新建一个文件夹,把这两二货放进去。解释一下:opencv_createsamples.exe...
opencv 训练自己的分类器
1、opencv 3.1.0 和 3.2.0 已经没有了convert_cascade.c 文件,打开 ..\opencv-3.1.0\sources\samples\ 和 ..\opencv-2.4.10\sources\samples\  ,如下图 所以嘞,从旧版本的opencv导出这个文件,来生成conver_cascade.exe 文件。 2、conver_cascade.exe
opencv二维码训练
二维码训练,完整的流程,不会的可以咨询我
opencv训练人脸
级联分类器 ​ 执行训练的时候会输出一系列的参数,其中可以看到:【stageType: BOOST】。boosting算法涉及到弱分类器和强分类器的概念。弱分类器分类正确率较低,但是较容易获得,强分类器分类正确率较高,但是较难获得。只要样本充足,弱学习可以通过一定的组合获得任意精度的强学习。级联分类器就是 N个弱分类器 以级联的方式,从简单到复杂逐步串联而成。 ​ 可以用决策树来构建一个简单的弱分...
opencv 的adaboost haar特征训练
我在调用opencv的opencv_haartraining.exe,出现如下错误:rnOpencv Error: Assertion failed in unknown function,\..\..\apps\haartraining\cvhaartraing.cpp,line 1859.rn出现上面提示的错误,我看到过别人也有问出现这种问的,有人回答说是可能是样本选取不合理,但是我用的是网上下载的MIT人脸检测图片库啊,2千多张正样本,4千多张负样本,MIT的样本库,人家的样本应该很合理吧,我训练到一级的时候就提示出现这种错误,麻烦各位大神给帮帮忙啊,rn[img=https://img-bbs.csdn.net/upload/201308/03/1375518089_205768.jpg][/img]
opencv图像识别训练实例
我一度以为图像训练会很难,觉得很高深,直到我亲自做了一个图像的训练才认识到如果仅仅是单纯地学习和使用,真的很简单。 本文按照如下顺序来进行详细解释如何进行图像识别训练过程: 制作图像 图像数据 图像训练 图像识别实例 选取图像集 我这里下载了12张杨幂的照片作为数据集来提取脸部照片ROI。 #include &amp;lt;QApplication&amp;gt; #include &quot;openc...
opencv人脸识别训练py
opencv人脸识别训练py文件,包含人脸训练以及保存模型的代码
opencv库 not found的警告问题
最近在使用opencv库交叉编译的时候,总是报下面的警告,但其实库的路径和链接名字都是对的,程序也可以正常运行,但是不喜欢有警告的程序,于是折腾了一天,总算搞定了这个问题。 /usr/local/linaro-aarch64-2017.11-gcc7.2/bin/…/lib/gcc/aarch64-linux-gnu/7.2.1/…/…/…/…/aarch64-linux-gnu/bin/ld:...
OpenCV:OpenCV目标检测Boost方法单独训练
        在古老的CNN方法出现以后,并不能适用于图像中目标检测。20世纪60年代,Hubel和Wiesel( 百度百科 )在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(Convolutional Neural Networks-简称CNN)。         参考:DNN的演进结构——CNN      ...
相关热词 c# 线程顺序 c#昨天当前时间 c# 多进程 锁 c#mysql图片存取 c# ocx 委托事件 c# 读取类的属性和值 c# out 使用限制 c#获取url的id c#怎么进行分页查询 c# update 集合