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 相关文章推荐
MySQL中表的复制以及大型数据表的备份教程
Nov 25 Python
学习python 之编写简单乘法运算题
Feb 27 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
Jun 17 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
对python中return与yield的区别详解
Mar 12 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Apr 24 Python
Python爬虫基础之简单说一下scrapy的框架结构
Python爬虫基础之初次使用scrapy爬虫实例
Python上下文管理器Content Manager
Jun 26 #Python
仅用几行Python代码就能复制她的U盘文件?
总结几个非常实用的Python库
Jun 26 #Python
手残删除python之后的补救方法
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
You might like
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
php的PDO事务处理机制实例分析
2017/02/16 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
SVG描边动画
2017/02/23 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
Numpy之文件存取的示例代码
2018/08/03 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
pytorch打印网络结构的实例
2019/08/19 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
python打开音乐文件的实例方法
2020/07/21 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
工业学校毕业生自荐书
2014/01/03 职场文书
学生个人自我鉴定
2014/03/26 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
实习班主任自我评价
2015/03/11 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
KTV员工管理制度
2015/08/06 职场文书