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 daemon守护进程实现
Aug 27 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
Python实现随机生成手机号及正则验证手机号的方法
Apr 25 Python
python 读取DICOM头文件的实例
May 07 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
python多线程抽象编程模型详解
Mar 20 Python
python中with用法讲解
Feb 07 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
Python使用pandas导入csv文件内容的示例代码
Dec 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
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
python缩进区别分析
2014/02/15 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
keras实现多种分类网络的方式
2020/06/11 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
财务助理岗位职责
2013/11/10 职场文书
公司培训欢迎词
2014/01/10 职场文书
销售经理工作职责
2014/02/03 职场文书
大专会计自我鉴定
2014/02/06 职场文书
个人四风对照检查材料
2014/09/26 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
老龙头导游词
2015/02/11 职场文书
食品仓管员岗位职责
2015/04/01 职场文书