opencv 分类器的训练(生成.xml, CascadeClassifier)

检测的物体是否为绝对刚性的物体,也就是检测的目标是一个固定物体,没有变化(如特定公司的商标),这样的物体只要提供一份样本就可以进行训练。但绝大数时候我们想进行训练的目标是非绝对刚性的物体,如对人的检测,包括人脸识别、手势识别。

分类器的训练以分为以下三部进行:

1、 样本的创建(正样本和负样本)
2、 训练分类器(生成.xml)
3、 利用训练好的分类器进行目标检测

正样本:所谓正样本就是只包含检测目标的图片
1、要求尺寸必须相同,例如40x30
2、进行灰度处理
负样本:不包含检测目标的任何图片(背景图片)
1.不要求样本尺寸,但要大于等于正样本的大小;且负样本不能重复,要增大负样本的差异性。
2.负样本灰度化,同正样本操作相同。
制作正样本:
1、收集数据(截图或拍照等)进行处理:
2、 将所有图像调整成一致大小,我用的“美图看看”这款软件,批量处理的,我处理的统一尺寸是40x30
3、进行灰度处理

#include "stdafx.h"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
#include <stdio.h>
 
using namespace cv;
using namespace std;
 
 
int main()
{
	char buffer[50];
	char buffer1[50];
 
	int i = 0;
 
	for (i = 1; i <= 100; i++)
	{
		sprintf_s(buffer, "C:\\Users\\Administrator\\Desktop\\xml\\ww\\%d.png", i);
		sprintf_s(buffer1, "C:\\Users\\Administrator\\Desktop\\xml\\pos\\%d.png", i);
 
		Mat src = imread(buffer, IMREAD_COLOR);
 
		if (src.empty())
		{
			return -1;
		}
 
		cvtColor(src, src, COLOR_BGR2GRAY);
		equalizeHist(src, src);
 
		imwrite(buffer1, src);
	}
    return 0;
}

4、这样正样本就处理好了,接下来要生成posdata.dat文件

将opencv安装目录的D:\Program Files\opencv\build\x64\vc15\bin\opencv_createsamples.exe和opencv_traincascade.exe复制到需要进行图像处理的目录下(也可不复制,操作时加上目录)
制作dos命令操作文件dat_cmd.bat:输入dir /b > posdata.dat(表示将当前文件写入posdata.dat)

双击执行dat_cmd.bat生成posdata.dat,打开posdata.dat,删除不需要文件
在对文件进行处理,使其含有图片信息,格式为:图片路径 检测目标在图片中的个数 起始监测点坐标(x,y) 图片大小(w,h)
5、生成训练.vec文件
在这里插入图片描述
命令行参数:

-vec <vec_file_name>

输出文件,内含用于训练的正样本。

-img <image_file_name>

输入图像文件名(例如一个公司的标志)。

-bg <background_file_name>

背景图像的描述文件,文件中包含一系列的图像文件名,这些图像将被随机选作物体的背景。

-num <number_of_samples>

生成的正样本的数目。

-bgcolor <background_color>

背景颜色(目前为灰度图);背景颜色表示透明颜色。因为图像压缩可造成颜色偏差,颜色的容差可以由 -bgthresh 指定。所有处于 bgcolor-bgthresh 和 bgcolor+bgthresh 之间的像素都被设置为透明像素。

-bgthresh <background_color_threshold>

-inv

如果指定该标志,前景图像的颜色将翻转。

-randinv

如果指定该标志,颜色将随机地翻转。

-maxidev <max_intensity_deviation>

前景样本里像素的亮度梯度的最大值。

-maxxangle <max_x_rotation_angle>

X轴最大旋转角度,必须以弧度为单位。

-maxyangle <max_y_rotation_angle>

Y轴最大旋转角度,必须以弧度为单位。

-maxzangle <max_z_rotation_angle>

Z轴最大旋转角度,必须以弧度为单位。

-show

很有用的调试选项。如果指定该选项,每个样本都将被显示。如果按下 Esc 键,程序将继续创建样本但不再显示。

-w <sample_width>

输出样本的宽度(以像素为单位)。

-h <sample_height>

输出样本的高度(以像素为单位)。

6、处理负样本:对负样本只需得到.dat文件(同正样本处理)
sdn.net/WangHuiShou/article/details/81199014
二、训练级联分类器
1、将生成的的负样本negdata.dat复制到和opencv_traincascade.exe同目录下(也可以吧正样本的pos.vec复制到此目录下)

并且制作训练命令train.bat
参考

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

位沁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值