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中的私有属性
Aug 21 Python
Python入门篇之字典
Oct 17 Python
python中查看变量内存地址的方法
May 05 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
Jul 01 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
Python UnboundLocalError和NameError错误根源案例解析
Oct 31 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
Dec 11 Python
python中有关时间日期格式转换问题
Dec 25 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
Python find()、rfind()方法及作用
Dec 24 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教程孙仲岳主讲
2008/01/07 PHP
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
2019/10/18 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
jQuery使用手册之 事件处理
2007/03/24 Javascript
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
jquery tools系列 expose 学习
2009/09/06 Javascript
Array.prototype.concat不是通用方法反驳[译]
2012/09/20 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法
2019/02/21 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
Python连接phoenix的方法示例
2017/09/29 Python
python+os根据文件名自动生成文本
2019/03/21 Python
python实现QQ批量登录功能
2019/06/19 Python
python plotly绘制直方图实例详解
2019/07/22 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
遇到的Mysql的面试题
2014/06/29 面试题
Java的类与C++的类有什么不同
2014/01/18 面试题
仓库主管的岗位职责
2013/12/04 职场文书
六查六看剖析材料
2014/02/15 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
父亲节活动总结
2015/02/12 职场文书
Python Parser的用法
2021/05/12 Python