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中生成Epoch的方法
Apr 26 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
Python机器学习之SVM支持向量机
Dec 27 Python
Python聊天室程序(基础版)
Apr 01 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
使用Pyhton集合set()实现成果查漏的例子
Nov 24 Python
python实现布隆过滤器及原理解析
Dec 08 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 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
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
详解vue 路由跳转四种方式 (带参数)
2019/04/28 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
JS实现手风琴特效
2020/11/08 Javascript
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
python getopt 参数处理小示例
2009/06/09 Python
python实现udp数据报传输的方法
2014/09/26 Python
Python数据类型详解(四)字典:dict
2016/05/12 Python
Django实现自定义404,500页面教程
2017/03/26 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
开工庆典邀请函范文
2014/01/16 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
员工年终考核评语
2014/12/31 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
运动会加油稿50字
2015/07/21 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
mysql查看表结构的三种方法总结
2022/07/07 MySQL