一、前言
利用OpenCV库实现指定物体检测是个比较常用同时也很有趣的功能,因为疫情不能外出,所以就在家尝试着做了一下,检测电脑摄像头实时画面中的地球仪,现尽量把过程简明扼要的记录一下,方便需要此功能的道友按照文章步骤实现,同时也方便自己日后用到时查看。(环境:win10+OpenCV3.3.1+vs2017)
二、简介
该方法中使用的分类器基于级联神经网络,可以根据需求设置合适的强分类器级数来提高检测效果。使用到的两个程序是OpenCV3中包含的opencv_createsamples.exe和opencv_traincascade.exe,可以在自己电脑上的OpenCV包中找到这两个文件。第一个程序用来准备正样本数据,输出为*.vec文件。第二个程序用来训练分类器,支持Haar和LBP这两种常用的特征,训练成功输出xml文档。如果使用OpenCV2,第二个程序应为opencv_haartraining.exe,这个程序在OpenCV3中已被弃用。
三、步骤
1、文件准备
创建文件夹,我命名为sample,下面新建这三个空文件夹
![3bfc40b6b0c5d38d0bc95906ce3a7be3.png](https://i-blog.csdnimg.cn/blog_migrate/546116ad63e09f6123aea6772ed51377.png)
negative存放负样本,positive存放正样本,空文件夹xml用来存放即将生成的xml文档。
在...opencv3.3.1buildx64vc14bin路径下找到上述两个程序,拷贝到sample文件夹下,如图:
![1e9f8ba5fc308919cca929d047770006.png](https://i-blog.csdnimg.cn/blog_migrate/3bebd2235aa2e28e4cdf365a9d9b27d7.png)
2、正样本准备
我用电脑相机拍摄了422张不同光照角度的地球仪图片存放在positive文件下,每张照片大小为640*360。对正样本进行批量处理,转为灰度图像并resize为64*36(缩小的同时保持比例不变),关于图像文件