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

编译的文章我之前贴过了,需要的可以点这个链接

我的样本是车辆检测,一共准备了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的文件,打开会看到包含图像名称和路径,如下:

opencv图像分隔出图片中的衣服 opencv图像分类训练_txt文件


Windows

打开命令符,进入样本文件夹,输入以下命令

dir /b >neg.txt

打开txt文件,删除其中一行neg.txt,并使用查找替换,给文件名加上相对路径,如下:–未在windows操作,贴一张效果图

opencv图像分隔出图片中的衣服 opencv图像分类训练_opencv图像分隔出图片中的衣服_02


完成后,将neg.txt文件剪切到neg、pos同一级别文件夹下

2.3正样本训练

Linux下

打开终端,输入如下命令

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

然后双击使用记事本打开文件,使用查找替换改成如下形式:/pos/image.png 1 0 0 -W -H

opencv图像分隔出图片中的衣服 opencv图像分类训练_opencv图像分隔出图片中的衣服_03


文件夹就会多一个pos.vec文件,正样本就准备好了

Windows下

打开命令符,进入样本所在文件夹,输入以下命令:

dir /b >pos.dat

打开文件删除pos.dat一行,然后进行文件查找替换成如下格式

opencv图像分隔出图片中的衣服 opencv图像分类训练_查找替换_04


保存后剪切然后保存到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文件

还在训练的文件,这个超级慢,可能要几天的时间才能训练完

opencv图像分隔出图片中的衣服 opencv图像分类训练_txt文件_05

测试结果:

opencv图像分隔出图片中的衣服 opencv图像分类训练_opencv图像分隔出图片中的衣服_06


opencv图像分隔出图片中的衣服 opencv图像分类训练_上传_07

自学python编程半年的小白,一块学习啊。
正负样本和训练好的分类集也上传了,图片都是处理好的,下面是链接:
正样本8144张:
负样本9000张:

训练集:

可以直接拿来用,需要的可以留qq和微信,我可以发给你
已经上传了不需要积分的,需要的去我上传的资源找一下吧,,