使用opencv的级联分类器训练样本获得xml数据的方法 2021.02.17

本文介绍了如何使用OpenCV的opencv_createsamples.exe和opencv_traincascade.exe工具,通过收集正负样本图片,进行图像预处理,创建标签文件,调整图片大小并灰度化,最后生成描述文件和vec文件,训练级联分类器以得到XML数据集。详细步骤包括样本准备、标签文件创建、vec文件生成和分类器训练。
摘要由CSDN通过智能技术生成

大致步骤是:收集样本(正、负样本)——制作标签文件——训练样本——获得xml数据集
使用opencv(我使用的版本是opencv 3.4.12)自带的build\x64\vc15\bin里面的opencv_createsamples.exe和opencv_traincascade.exe(opencv_createsamples.exe生成vec文件,opencv_traincascade.exe训练生成xml文件)

1.在安装的opencv的bin文件夹里创建三个空白文件夹,分别是negdata、posdata、xml
2.收集正样本图片放入posdata文件夹中,正样本图片就是我们需要检测的目标图片,这个图片越多越好,对图片的要求是:1、只包含要检测的图片; 2、图片应尽量保持相同的大小(也可以不用保持相同大小);3、如果有能力那么建议对检测的图片进行二值化处理(也可以不用处理)。以上要求都是为了提高正样本(即目标图片)训练的准确度。

收集负样本图片放入negdata文件夹中,负样本是没有包含我们需要检测的目标图片,图片越多越好,应大于等于正样本图片数,对图片的要求:1、图片内没有任何与检测目标相同的部分,2、任何图片都可以作为负样本图片,以上要求都是为了提高正样本的抗环境复杂度。参考此处链接

下面开始整理posdata文件夹和negdata文件夹:
1.分别让内部图片呈现出 1.jpg 2.jpg 此类格式。此时,可使用代码如下

# import  os
# path="D:\\opencv\\build\\x64\\vc15\\bin\\posdata"
# filelist = os.listdir(path)
# #print(filelist)
# i = 0
# for item in filelist:
#     src = os.path.join(os.path.abspath(path), item)
#     dst = os.path.join(os.path.abspath(path),str(i) + '.jpg') #重新命名并改格式

#     os.rename(src, dst)
#     print('converting %s to %s ...' % (src, dst))
#     i = i + 1



import  os
path="D:\\opencv\\build\\x64\\vc15\\bin\\negdata"
filelist = os.listdir(path)
#print(filelist)
i = 0
for item in filelist:
    src = os.path.join(os.path.abspath(path), item)
    dst = os.path.join(os.path.abspath(path),str(i) + '.jpg'
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值