Python实战之OpenCV实现猫脸检测


Posted in Python onJune 26, 2021

开发工具

Python版本:3.6.4

相关模块:

cv2模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理简介

简单地讲一讲Haar分类器,也就是Viola-Jones识别器。

详细的原理说明可参考相关文件中的两篇论文:

Rapid Object Detection using a Boosted Cascade of Simple Features;

Robust Real-Time Face Detection.

(1)Haar-like特征

Haar-like矩形特征是用于物体检测的数字图像特征,由两个或者多个相邻的黑白矩形组合而成,矩形的特征值是白色矩形的灰度值之和减去黑色矩形的灰度值之和。一般地,我们认为矩形特征对一些简单的图形结构(线段、边缘)等较为敏感:

Python实战之OpenCV实现猫脸检测

具体到猫脸检测而言,我们认为把这样的矩形放到一个非猫脸区域后获得的特征值与放到一个猫脸区域后获得的特征值是不同的

利用上述基于特征的检测算法,不仅能够编码特定区域的状态,而且效率高于基于像素的检测算法。

(2)积分图

下面我们来考虑一下如何计算矩形的特征值。对图像中的任意一点A(x, y),定义该点的积分图为其左上角的所有像素值之和,即:

Python实战之OpenCV实现猫脸检测

因此,要计算矩形模板的特征值,也就是计算两个区域之间的像素和之差,只需要用特征区域端点的积分图来进行简单的加减运算就可以了:

Python实战之OpenCV实现猫脸检测

(3)Haar分类器

Haar分类器是一个监督学习分类器,要进行目标检测,首先要对图像进行直方图均衡化和归一化处理,然后检测里面是否包含要检测的物体。

流程框架图为(Haar分类器本质上由Haar特征提取器、离散强分类器以及强分类级联器组成):

Python实战之OpenCV实现猫脸检测

Haar分类器使用Adaboost算法,但是把它组织为了筛选式的级联分类器,在任意一级计算中,**一旦获得输入内容不在检测类中的结论,便终止计算,只有通过所有级别的分类器,才可认为检测到了目标物体,**以此来提高检测效率。

关于AdaBoost算法,我就不展开介绍了,有兴趣的同学可以自己查找相关资料进行学习。以后有时间我再对其进行详细的介绍。

(4)适用范围

适用于“基本刚性”的物体检测,如脸、汽车、人体和自行车等等。

(5)总结

Viola-Jones目标检测框架的核心思想是通过滑动窗口扫描图像(多尺度的扫描),然后将每个窗口的Haar特征值输入到筛选式的级联分类器中来判断该窗口内是否含有目标物体以实现目标检测。

具体实现

OpenCV中内置了基于Viola-Jones目标检测框架的Haar分类器,并提供了猫脸检测预训练好的模型。因此实现起来十分简单。

具体实现过程详见相关文件中的源代码。

效果演示

使用方式:

修改源代码中的图片名为自己需要检测的图片:

Python实战之OpenCV实现猫脸检测

在cmd窗口运行DetectCatFace.py文件即可。

效果:

原图1:

Python实战之OpenCV实现猫脸检测

检测结果1:

Python实战之OpenCV实现猫脸检测

原图2:

Python实战之OpenCV实现猫脸检测

检测结果2(并不能很好地区分狗狗和猫咪):

Python实战之OpenCV实现猫脸检测

到此这篇关于Python实战之OpenCV实现猫脸检测的文章就介绍到这了,更多相关OpenCV实现猫脸检测内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python解析发往本机的数据包示例 (解析数据包)
Jan 16 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
Python 正则表达式的高级用法
Dec 04 Python
关于python的bottle框架跨域请求报错问题的处理方法
Mar 19 Python
详解使用python的logging模块在stdout输出的两种方法
May 17 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
python调用c++传递数组的实例
Feb 13 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
Django实现内容缓存实例方法
Jun 30 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 Python
Python爬虫基础之简单说一下scrapy的框架结构
Python爬虫基础之初次使用scrapy爬虫实例
Python上下文管理器Content Manager
Jun 26 #Python
仅用几行Python代码就能复制她的U盘文件?
总结几个非常实用的Python库
Jun 26 #Python
手残删除python之后的补救方法
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
You might like
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
php zend 相对路径问题
2009/01/12 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
python处理“
2019/06/10 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
2014全国两会大学生学习心得体会
2014/03/10 职场文书
本科毕业生求职自荐信
2014/04/09 职场文书
农民工讨薪标语
2014/06/26 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL