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删除特定文件的方法
Jul 30 Python
python爬虫爬取网页表格数据
Mar 07 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
使用Django开发简单接口实现文章增删改查
May 09 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 Python
Django+python服务器部署与环境部署教程详解
Mar 30 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
Python调用REST API接口的几种方式汇总
Oct 19 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与javascript实现变量交互的示例代码
2013/07/23 PHP
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
Nuxt的路由动画效果案例
2020/11/06 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Python中bisect的用法及示例详解
2020/07/20 Python
python实现学生管理系统开发
2020/07/24 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
西式婚礼证婚词
2014/01/12 职场文书
资金主管岗位职责范本
2014/03/04 职场文书
最美家庭活动方案
2014/08/31 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
质量主管工作职责
2014/09/26 职场文书
买卖合同协议书范本
2014/10/18 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
邀请函模板
2015/02/02 职场文书
幼师个人总结范文
2015/02/28 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server