python结合opencv实现人脸检测与跟踪


Posted in Python onJune 08, 2015

模式识别课上老师留了个实验,在VC++环境下利用OpenCV库编程实现人脸检测与跟踪。

然后就开始下载opencv和vs2012,再然后,配置了好几次还是配置不成功,这里不得不吐槽下微软,软件做这么大,这么难用真的好吗?

于是就尝试了一下使用python完成实验任务,大概过程就是这样子的:

首先,配置运行环境:

下载opencv和python的比较新的版本,推荐opencv2.4.X和python2.7.X。

直接去官网下载就ok了,python安装时一路next就行,下载的opencv.exe文件运行后基本上是一个解压的过程,自己选择一个解压路径(尽量不要出现中文),然后就坐等解压完成。

然后从opencv解压后的路径中找(D:\My Documents\Downloads)\opencv\build\python\2.7\x86,()里面的部分是你自己的安装路径,其中x86对应32位的机器,x64代表64位的机器,当然要按照你机器的实际情况选择了。将这个路径里面的cv2.pyd拷贝至python2.7的模块路径C:\Python27\Lib\site-packages里,python2.7默认安装在C盘跟目录下。

此时打开python,在cmd下输入python,或者直接打开“所有程序->active state active python->Python Interactive Shell”都行。

接下来输入import cv2,出错了对不对?为什么呢?

这是因为没有安装numpy这个python模块,去numpy的官网下载一个比较新的版本,因为最新的版本一般都是源代码,需要去命令行中安装,比较麻烦,推荐找一个exe文件。注意,在官网给出的链接中,切记看完全名称,后面一般都会提示这个模块在哪个python版本下安装时比较和谐,选择你自己安装的python版本对应的numpy模块。下载完成后安装时看一下该模块给出的python路径对不对,对的话然后next就行了,不对的话可能就是你的python是2.7,却下了numpy for python 3.0.

这时再去import一下cv2,如果什么也没有输出的话就是import成功了。

简直比vs下的配置简单了好几个数量级,对不对?

配置好环境后,跟着opencv嗨起来!

然后在pythonwin或idle(python gui)下新建一个py文件,输入以下代码:

import cv2
import numpy as np
cv2.namedWindow("test")
cap=cv2.VideoCapture(0)
success,frame=cap.read()
classifier=cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")   #确保此xml文件与该py文件在一个文件夹下,否则将这里改为绝对路径,此xml文件可在D:\My Documents\Downloads\opencv\sources\data\haarcascades下找到。

while success:
success,frame=cap.read()

size=frame.shape[:2]

image=np.zeros(size,dtype=np.float16)

image=cv2.cvtColor(frame,cv2.cv.CV_BGR2GRAY)

cv2.equalizeHist(image,image)

divisor=8

h,w=size

minSize=(w/divisor,h/divisor)

faceRects=classifier.detectMultiScale(image,1.2,2,cv2.CASCADE_SCALE_IMAGE,minSize)

if len(faceRects)>0:


for faceRect in faceRects:



x,y,w,h=faceRect



cv2.circle(frame,(x+w/2,y+h/2),min(w/2,h/2),(255,0,0))



cv2.circle(frame,(x+w/4,y+h/4),min(w/8,h/8),(255,0,0))



cv2.circle(frame,(x+3*w/4,y+h/4),min(w/8,h/8),(255,0,0))



cv2.rectangle(frame,(x+3*w/8,y+3*h/4),(x+5*w/8,y+7*h/8),(255,0,0))

cv2.imshow("test",frame) 

key=cv2.waitKey(10)

c=chr(key&255)

if c in ['q','Q',chr(27)]:


break
cv2.destroyWindow("test")

为什么没有注释,你恐怕知道下雨天,dir()和help()更配呦。

这段代码的功能就是对计算机摄像头拍到的视频加以处理,使其显示并追踪人脸。下图是运行效果:

python结合opencv实现人脸检测与跟踪

最后再说一句,这个过程说起来简单,但很容易出错,希望大家能自己找到错误的原因,并解决错误。如果自己解决不了的话,不妨把问题贴在评论里,大家来共同解决,共同进步。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Python 相关文章推荐
Python实现删除Android工程中的冗余字符串
Jan 19 Python
Python中的模块和包概念介绍
Apr 13 Python
Python统计日志中每个IP出现次数的方法
Jul 06 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
python音频处理用到的操作的示例代码
Oct 27 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
Python实现的圆形绘制(画圆)示例
Jan 31 Python
Python利用字典破解WIFI密码的方法
Feb 27 Python
python 上下文管理器及自定义原理解析
Nov 19 Python
Python3 webservice接口测试代码详解
Jun 23 Python
python字典与json转换的方法总结
Dec 28 Python
Python的property属性详细讲解
Apr 11 Python
python实现数值积分的Simpson方法实例分析
Jun 05 #Python
python采集百度百科的方法
Jun 05 #Python
python中引用与复制用法实例分析
Jun 04 #Python
Python进程间通信用法实例
Jun 04 #Python
python中__slots__用法实例
Jun 04 #Python
python协程用法实例分析
Jun 04 #Python
Python获取系统默认字符编码的方法
Jun 04 #Python
You might like
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
使用Python获取Linux系统的各种信息
2014/07/10 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
Django 连接sql server数据库的方法
2018/06/30 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
Python数学形态学实例分析
2019/09/06 Python
python匿名函数的使用方法解析
2019/10/10 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
Python post请求实现代码实例
2020/02/28 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
使用K.function()调试keras操作
2020/06/17 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
介绍一下gcc特性
2015/10/31 面试题
中学生学雷锋演讲稿
2014/04/26 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
python单元测试之pytest的使用
2021/06/07 Python
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL