这里我用的是OpenCV+python+pycharm。整体脉络:环境配置–收集样本–转化文件–得到.xml文件–使用,在此记录一下。
一、环境配置
在python左上角点进这个小扳手就可以安装opencv_python,这里推荐安装4以下版本,原因之后会说。

这是目前我知道的最简单的办法,但我估计会有很多不便,不然也不会有这么多人不用这个法子。
二、样本收集
安装好后,我们开始收集正样本和负样本,正样本:负样本=1:3,正样本尺寸:负样本尺寸=1:6的最终效果比较好。
1.正样本
收集后将所有图片依次命名,处理样本,灰度化,统一规格【50,50】。(PS:1.路径注意改为和之前方向想反斜杠或在前加r。 2.最后的/一定要有)
批量改名工具:https://developer9.baidupan.com/112419bb/2020/09/21/c439719b2d498ba56432508fc75bc13a.exe?st=i1Sj-mv97rzdN0QEpwWPzg&e=1637754176&b=ALoJhge1Ur9TiQDkBLJU2QfrWewEggCJB7ELl1ftVbJWlFnUADhQe1k8XiZRZFIuBjY_c&fi=29995233&pid=61-54-97-242&up=2

path = "D:/3D/tennis/"#图片所在文件夹路径
for i in range(1, 141):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('D:/3D/tennis/pos/'+str(i)+'.jpg', img5050)

2.负样本就没那么多讲究了,只要不包含正样本的图片就行,负样本下载链接。https://pythonprogramming.net/static/images/opencv/negative-background-images.zip

import cv2
path = "D:/3D/tennis/false/"
for i in range(1, 501):print(path+str(i)+'.jpg')img = cv2.imread(path+str(i)+'.jpg', cv2.IMREAD_GRAYSCALE)cv2.imwrite('D:/3D/tennis/neg/'+str(i)+'.jpg', img)

三、转化文件
1.正负样本描述文件

import cv2
import os
def save_imginfo_to_txt(filepath, txtpath):files = os.listdir(filepath)res = []for file in files:filename = filepath + "\\" + fileimg = cv2.imread(filename)# 数据的格式res.append([filename, 1, 0, 0, img.shape[0], img.shape[1]])save_txt = txtpath + "\\" + "file_name.txt"file = open(save_txt, 'a')for i in res:file.write(' '.join([str(j) for j in i]))file.write("\n")file.close()# 主函数
filepath = "D:/3D/tennis/pos/"#info正
txtpath = "D:/3D/tennis/pos/"
save_imginfo_to_txt(filepath, txtpath)

正样本描述文件中第一列是图片路径;第二列是图片中能检测出的样本表数量,有几个就写几;第三第四列是图像的坐标,(0,0)就行;第五第六列是图像宽和高,需要注意是一样的,宽高比需要一样的。
2.将正样本转化为.vec
在创建vec文件时,需要把pos_image.txtneg_image.txt两个样本描述文件剪切到与两照片文件夹在同一层。将opencv_createsamples.exeopencv_traincascade.exe也置于该层,这两个文件在D:\OpenCV_set\opencv\build\x64\vc14\bin(斜体部分为你本人安装地点)。如果没有这两个文件,可点此下载opencv4.0之前版本https://opencv.org/releases/,下好就有。

win+r后先切换到d盘:cd d:
再打入cd D:/3D/tennis(文件夹路径)
最后打入如下代码生成.vec文件
opencv_createsamples -info info.txt -num 50 -w 50 -h 50 -vec positives.vec

-info字段填写正样本描述文件;
-num制定正样本的数目;
-w和-h分别指定正样本的宽和高(-w和-h越大,训练耗时越大);
-vec用于保存制作的正样本。

四、得到.xml文件
新建一文件夹用于存放.xml文件

opencv_traincascade -data data -vec positives.vec -bg bg.txt -numPos 139 -numNeg 1000 -numStages 16 -w 50 -h 50

-data data:训练后data目录下会存储训练过程中生成的文件
-vec positives.vec:Pos.vec是通过opencv_createsamples生成的vec文件
-bg bg.txt:bg.txt是负样本文件的数据
-numPos :正样本的数目,这个数值一定要比准备正样本时的数目少,不然会报can not get new positive sample.
-numNeg :负样本数目,数值可以比负样本大
-numStages :训练分类器的级数
-w 50:必须与opencv_createsample中使用的-w值一致
-h 50:必须与opencv_createsample中使用的-h值一致
-w和-h的大小对训练时间的影响非常大
五、使用

import cv2watch_cascade = cv2.CascadeClassifier('/home/pi/opencv_createsamples/data/cascade.xml')#分类器路径img = cv2.imread('test.jpg')#需要识别的照片,放到opencv_createsamples文件夹下gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)watches = watch_cascade.detectMultiScale(gray)for (x,y,w,h) in watches:cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)roi_gray = gray[y:y+h,x:x+w]roi_color = img[y:y+h,x:x+w]cv2.imshow('识别窗口',img)
k = cv2.waitKey(0)

运行即可,如果识别的图片太大,运行下面程序调整一下

import cv2
img = cv2.imread('test.jpg')#读入照片
img1 = cv2.resize(img,(300,300))#调整大小
cv2.imwrite('test.jpg',img1)#保存图片

新人上路,不足之处还望多多指教。
参考网站:
1.https://blog.csdn.net/YK_LaNce/article/details/100576560
2.https://blog.csdn.net/weixin_45880057/article/details/114006626
3.https://blog.csdn.net/qq_27396861/article/details/89159804
4.https://www.cnblogs.com/tornadomeet/archive/2012/03/28/2420936.html

Opencv分类器的训练(内含文件批量改名工具及负样本图包下载地址)相关推荐

  1. 文件批量改名工具v2.0_绿色免安装版

    文件批量改名工具 文件批量改名工具可以用来批量重命名多个文件.您可以使用数字来指定命名规则,替换特定的字符或短语,并将文件特有的信息插入每个新文件名. 批量改名 命名规则:定义重命名过程中的命名规则, ...

  2. 文件批量改名工具,教你如何将图片文件名以顺序编号来进行命名

    文件太多了,想要给图片文件名进行重命名,要如何进行操作?比如以顺序编号命名,要如何进行操作?今天小编就来教教大家要如何进行操作. 首先,进入文件批量改名高手主页面,点击板块栏里的"文件批量重 ...

  3. 好用的批量改名工具——文件批量改名工具V2.0 绿色版

    我找了一个绿色免安装的软件来实现批量改名要求 下载地址:http://www.orsoon.com/Soft/14049.html#xiazai 添加图片后,开始改名.通过输入a#就可以将这些图片进行 ...

  4. win7批量修改计算机名,文件批量改名助手

    文件批量改名助手是一款文件批量改名工具,功能简洁.操作简便.侧重实用,可通过鼠标点击轻松完成添加文件.设定改名规则.进行批量改名,所有功能集成在同一界面实现,易于操作和使用.文件批量改名助手不仅实现了 ...

  5. mac 批量清空文件夹文件_【XSS 聚宝瓶】文件及文件夹批量改名工具

    置顶公众号,否则不能及时收到新文章 推荐给朋友,让朋友也能收到免费文章 在公众号发送函数或应用的关键字,即可免费获取对应教程 一.功能说明我们在日常办公的时候,经常会碰到文件名不规范,想要整理很不方便 ...

  6. 春林文件批量改名系统

    春林文件批量改名系统是一款功能强大,且十分便捷的批量文件改名软件,汇集了常用批量改名文件中所有优点,不仅可以轻松快速的将文件一键重命名,而且还支持大部分的序号格式,支持修改扩展名.mp3标签.mp3通 ...

  7. 实现文件及文件批量改名的工具(包含未确定盘符的情况下)

    标题:实现文件及文件批量改名的工具 作者:慕昊睿 时间:2019年10月30日 版权:苏比文化传媒工作室 接单:+WeChat ID:18171905547 处理前: 处理后 # 以下代码为test. ...

  8. 操作既简单、实用性强的文件批量改名高手

    有时候很多文件的文件名需要我们更改为统一顺序的名称,如果手工更改的话,很繁琐并且浪费大量时间,今天给大家介绍一款操作简单又实用性强的,并且还是单文件的软件[文件批量改名高手],使得我们的工作效率又提升 ...

  9. 『 文件操作 』文件批量改名

    # coding:utf-8 __author__ = 'Mr.数据杨' __explain__ = '文件批量改名' \'1.案例中是图片数据改名' \'2.默认路径path'import os i ...

最新文章

  1. python3 分割函数 partition rpartition 函数
  2. LINUX常见小问题汇总
  3. uboot 分析之 启动流程
  4. 基于HTML5 的人脸识别活体认证
  5. Python基础知识4: while循环基本使用
  6. AngularJS学习之旅—AngularJS 模块(十五)
  7. 关于GIT的万年坑你还在踩吗?答应我别傻了
  8. 微信小程序开发的完整人性化版攻略
  9. 计算机语言环境变量,Win7环境变量中如何切换语言
  10. adams2015怎么把工具栏打开_怎么合并音乐?教大家3种快速完成音频合并的办法!...
  11. 二冲程发动机均值模型仿真
  12. c语言文字表达式,【原创】化学方程式配平算法的设计与实现( 非Naylon版)
  13. umail for linux,umail邮件服务器 For Linux安装图示(独立安装包)
  14. [JZOJ5551] 【NOI2019模拟6.24】旅途【最短路】
  15. 23种设计模式-个人笔记(三)
  16. 推荐几个有趣且实用的微信小程序……
  17. 将AE开发的专题图制作功能发布为WPS
  18. 如果你已经掌握了 Python 101,那么你可能比 OpenAI 的原型 Codex 更擅长编程
  19. Chef 命令实例,你必须了解的100条
  20. 梦想的脚步---C语言的学习与成长

热门文章

  1. apple售后服务官网_Apple准备好订阅捆绑以促进数字服务
  2. Websocket 可以玩出些什么花儿?
  3. 阿里云盘 v2.4.127 最后一个无会员免更新版本
  4. Conmi的正确答案——keil的“Cannot read RTE data from project file: RTE is not enabled”问题
  5. nginx 结合php 实现高级配置详解
  6. python对股票的基本面进行分析_python菜鸟学员如何获取沪深股票基本面数据
  7. 567网盘 飞猫网盘 星耀网盘 kufile expfile rardisk RoseFile 雪球网盘 77file 迅牛网盘 ownfile 1988网盘 520网盘解析演示
  8. 噪声系数测试之Y因子(二)
  9. 白杨SEO:360搜索排名核心技巧是什么?网站怎么做360的SEO优化排名?
  10. python爬虫爬取百度、360搜索引擎信息