opencv训练自己的分类器,可替换各种目标识别

opencv训练自己的分类器,可替换各种目标识别

环境:opencv-4.0,python,c++ 方法:opencv_createsamples,opencv_traincascade,haar特征或者lbp特征+cascade分类器 流程:

收集样本,处理样本

训练分类器

目标检测

收集样本,处理样本

收集正样本

关于正样本的收集,一张或多张都可以,首先对样本进行处理,我收集了50个正样本。

处理正样本

处理样本,灰度化,归一化,大小为(50, 50)

path = "/home/yk/project/pyCharm/train/true/"

for i in range(1, 51):

print(path+str(i)+'.jpg')

img = cv2.imread(path+str(i)+'.jpg', cv2.IMREAD_GRAYSCALE)

img5050 = cv2.resize(img, (50, 50))

cv2.imshow("img", img5050)

cv2.waitKey(20)

cv2.imwrite('/home/yk/project/pyCharm/train/pos/'+str(i)+'.jpg', img5050)

处理后效果

收集负样本

关于负样本,只要不含有正样本图片即可,最好是识别场景的图片。 我找到一个负样本下载链接。https://pythonprogramming.net/static/images/opencv/negative-background-images.zip 下载后如图

生成描述文件

正负样本描述文件生成。

import os

def create_pos_n_neg():

for file_type in ['neg']:

for img in os.listdir(file_type):

if (file_type == 'neg'):

line = file_type + '/' + img + '\n'

with open('bg.txt', 'a') as f:

f.write(line)

elif (file_type == 'pos'):

line = file_type + '/' + img + ' 1 0 0 50 50\n'

with open('info.txt', 'a') as f:

f.write(line)

if __name__ == '__main__':

create_pos_n_neg()

正样本描述文件 内容

负样本描述文件 内容

合成正样本vec

首先将opencv的两个自带工具复制到文件夹中,opencv_createsamples用于处理生成样本,opencv_traincascade用于训练分类器。

如果用单个样本生成vec执行命令

mkdir info

opencv_createsamples -img pos/1.jpg -bg bg.txt -info info/info.lst -pngoutput info -maxxangle 0.5 -maxyangle 0.5 -maxzangle 0.5 -num 1950

运行后显示Done,表示成功。 打开文件夹info 在最下面还有info.lst

输入命令

opencv_createsamples -info info/info.lst -num 1950 -w 50 -h 50 -vec pos.vec

完成。

如果用多个样本生成vec

使用工具createsample.pl合成正样本的vec。 代码

#!/usr/bin/perl

use File::Basename;

use strict;

##########################################################################

# Create samples from an image applying distortions repeatedly

# (cre

🎀 相关推荐

上瘾剧情介绍
365bet官方投注网址

上瘾剧情介绍

📅 08-16 👀 5390
未来e家窗帘好不好?有哪些优势?
365bet官方投注网址

未来e家窗帘好不好?有哪些优势?

📅 08-02 👀 8232
中国哪的“樱桃”最好吃?网友坚定,这8个地方上榜,有你故乡吗