Opencv 分类器训练--Linux/Windows详细教程,包含图片处理排序重命名

1.需要先下载opencv然后进行编译

编译的文章我之前贴过了,需要的可以点这个链接
https://blog.csdn.net/m0_46175974/article/details/107546524
我的样本是车辆检测,一共准备了8000+的正样本和负样本
然后在到编译完后的opencv3.4.3文件中找到opencv_createsamples和opencv_traincascade应用程序
opencv_createsamples:用于准备训练数据的正样本和测试样本
opencv_traincascade分类器的正样本数据。输出文件是以.vec为后缀的包含图像信息的二进制数据类型

2.新建opencv文件

建立neg和pos文件夹
negs:存负样本,任意不包含要检测物体的照片,可以是任意尺寸,最好是正样本尺寸的6倍以上,然后数量3:1
poss:存正样本照片,包含检测物体的照片,最好是统一尺寸的灰色图。
将编译完后opencv_createsamples和opencv_traincascade也复制到此文件夹中
2.1照片处理
新建neg和pos文件夹,等着存放处理后的照片
打开pycharm,运行以下程序,注意负样本尺寸要比正样本尺寸大

import cv2
import os

path = '/Documents/opencv/poss/'# 样本路径
# 方法一
for i in range(1, 9):
    print(path + str(i) + '.jpg')
    img = cv2.imread(path + str(i) + '.jpg', 0)
    res_img = cv2.resize(img, (45, 45),  interpolation=cv2.INTER_LANCZOS4)
    cv2.imwrite('/Documents/opencv/pos/' + str(i) + '.png', res_img)
# 方法二,推荐使用方法二
files = os.listdir(path)
n = 0
print(files)
for file in files:
    img = cv2.imread(path + file, 0)  # 图片灰化处理
    res_img = cv2.resize(img, (45, 45), interpolation=cv2.INTER_LANCZOS4)  # 图片压缩
    # 按顺序给照片重命名并保存
    cv2.imwrite('/Documents/opencv/pos/' + os.sep + str(n + 1) + '.png', res_img)
    n += 1

2.2负样本准备
Linux下
打开终端,输入如下命令

ls ./neg/*.*>neg.txt

运行后多出一个名字为neg.txt的文件,打开会看到包含图像名称和路径,如下:
在这里插入图片描述
Windows
打开命令符,进入样本文件夹,输入以下命令

dir /b >neg.txt

打开txt文件,删除其中一行neg.txt,并使用查找替换,给文件名加上相对路径,如下:–未在windows操作,贴一张效果图
在这里插入图片描述
完成后,将neg.txt文件剪切到neg、pos同一级别文件夹下
2.3正样本训练
Linux下
打开终端,输入如下命令

ls ./pos/*.*>pos.dat

然后双击使用记事本打开文件,使用查找替换改成如下形式:/pos/image.png 1 0 0 -W -H
在这里插入图片描述
文件夹就会多一个pos.vec文件,正样本就准备好了
Windows下
打开命令符,进入样本所在文件夹,输入以下命令:

dir /b >pos.dat

打开文件删除pos.dat一行,然后进行文件查找替换成如下格式
在这里插入图片描述
保存后剪切然后保存到neg,pos同级目录下,然后执行如下命令

opencv_createsamples.exe -vec pos.vec -info pos.dat -bg neg.txt -w 20 -h 20

pos.vec文件生成,正样本也准备就绪

3.分类器训练

3.1Linux下
在文件夹中新建data文件夹,执行以下命令:

opencv_traincascade -data data -vec pos.vec -bg neg.txt -numPos 1000 -numNeg 3000 -numStages 20 -w 45 -h 45 -minHitRate 0.9999 -maxFalseAlarmRate 0.5 -mode ALL

注:numPos:正样本数量 numNeg:负样本数量,本来我用的是8000+样本,但是如果输入实际实际数量会错误,在stackover查找,需要降低实际数量
参考文章:
https://stackoverflow.com/questions/27726973/haar-training-error-215-img-row-img-cols-vecsize-in-function
然后开始训练,速度比较慢,需要耐心等待,执行完成后data文件夹会生成训练好的xml文件

还在训练的文件,这个超级慢,可能要几天的时间才能训练完
在这里插入图片描述

测试结果:在这里插入图片描述
在这里插入图片描述

自学python编程半年的小白,一块学习啊。
正负样本和训练好的分类集也上传了,图片都是处理好的,下面是链接:
正样本8144张:https://download.csdn.net/download/m0_46175974/12686346
负样本9000张:
https://download.csdn.net/download/m0_46175974/12686344
训练集:
https://download.csdn.net/download/m0_46175974/12686326
可以直接拿来用,需要的可以留qq和微信,我可以发给你
已经上传了不需要积分的,需要的去我上传的资源找一下吧,,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值