参考教程:https://blog.csdn.net/MR_Peach07/article/details/74093800
【准备】
Python 2.7.13
opencv 3.4.1
opencv的训练器在参考教程中有分享
【过程】
1、建立文件夹如下:
data中用于存放生成的pos.vec(开始为空)
data1存放分类器文件(开始为空)
posdata和negdata分别存放正负样本文件
2、 生成正负样本 数据文件
生成之后删除最后一行
处理posdata.dat,规范格式为(我的图片大小都是20*20)
(这个处理可以直接文本替换,我是用代码如下)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void readFile(){
FILE *fp,*fp1;
fp = fopen("read.dat", "r");
fp1 = fopen("posdata.dat", "w");
if (fp == NULL){
printf("Open File failed.\n");
exit(0);
}
char a[100];
char b[100] = " 1 0 0 20 20";
while (!feof(fp)){
fscanf(fp, "%s", &a);
fputs(a, fp1);
fputs(b, fp1);
fputc('\n',fp1);
}
fclose(fp);
}
int main(){
readFile();
return 0;
}
处理negdata.dat,添加 路径
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void readFile(){
FILE *fp,*fp1;
fp = fopen("read.dat", "r");
fp1 = fopen("negdata.dat", "w");
if (fp == NULL){
printf("Open File failed.\n");
exit(0);
}
char a[100];
char b[100] = "negdata\\";
while (!feof(fp)){
fscanf(fp, "%s", &a);
fputs(b, fp1);
fputs(a, fp1);
fputc('\n',fp1);
}
fclose(fp);
}
int main(){
readFile();
return 0;
}
3、生成pos.vec
输入:opencv_createsamples.exe -info posdata\posdata.dat -vec data\pos.vec -num 3690 -w 20 -h 20
num一般为正样本数*0.9
4.训练
opencv_traincascade.exe -data data1 -vec data\pos.vec -bg negdata\negdata.dat numPos 243 -numNeg 300 -minHitRate 0.9999 -maxFalseAlarmRate 0.5 -featureType HAAR -numStages 20 -w 20 -h 20
两年前的草稿……现在已经不做这个方向了,就
版权声明:本文为sinat_34536092原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。