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

模式识别课上老师留了个实验,在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()更配呦。

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

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

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

(0)

相关推荐

  • python中使用OpenCV进行人脸检测的例子

    OpenCV的人脸检测功能在一般场合还是不错的.而ubuntu正好提供了python-opencv这个包,用它可以方便地实现人脸检测的代码. 写代码之前应该先安装python-opencv: 复制代码 代码如下: $ sudo apt-get install python-opencv 具体原理就不多说了,可以参考一下这篇文章.直接上源码. 复制代码 代码如下: #!/usr/bin/python# -*- coding: UTF-8 -*- # face_detect.py # Face De

  • Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简单几句就说清,所以本文只作基本算法的科普向. 看到一篇博客是介绍这个,但他用的是PIL中的Image实现的,感觉比较麻烦,于是利用Opencv库进行了更简洁化的实现. 相关背景 要识别两张相似图像,我们从感性上来谈是怎么样的一个过程?首先我们会区分这两张相片的类型,例如是风景照,还是人物照.风景照中

  • Python中使用OpenCV库来进行简单的气象学遥感影像计算

    OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用.OpenCV可用于开发实时的图像处理.计算机视觉以及模式识别程序.该程序库也可以使用英特尔公司的IPP进行加速处理. OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口.该库也有大量的Python, Java and MATLAB/OCTAVE

  • python使用opencv读取图片的实例

    安装好环境后,开始了第一个Hello word 例子,如何读取图片,保存图品 import cv2 import numpy as np import matplotlib.pyplot as plt #读取图片代码 img = cv2.imread('test.jpg',cv2.IMREAD_GRAYSCALE) #IMREAD_COLOR = 1 #IMREAD_UNCHANGED = -1 #展示图片 cv2.imshow('image',img) cv2.waitKey(0) cv2.d

  • python-opencv在有噪音的情况下提取图像的轮廓实例

    对于一般的图像提取轮廓,介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体. 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分. 首先加载原始图像,并显示图像 img = cv2.imread("temp.jpg") #载入图像 h, w = img.shape[:2] #获取图像的高和宽 cv2.imshow("Origin", img) 然后进行低通滤波处理,进行降噪 blured = cv2.blur(i

  • 详解如何用OpenCV + Python 实现人脸识别

    下午的时候,配好了OpenCV的Python环境,OpenCV的Python环境搭建.于是迫不及待的想体验一下opencv的人脸识别,如下文. 必备知识 Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等. opencv api 要想使用opencv,就必须先知道其能干什么,怎么做.于是API的重要性便体现出来了.就本例而言,使用到的函数

  • python使用opencv进行人脸识别

    环境 ubuntu 12.04 LTS python 2.7.3 opencv 2.3.1-7 安装依赖 sudo apt-get install libopencv-* sudo apt-get install python-opencv sudo apt-get install python-numpy 示例代码 #!/usr/bin/env python #coding=utf-8 import os from PIL import Image, ImageDraw import cv d

  • 在Python下利用OpenCV来旋转图像的教程

    OpenCV是应用最被广泛的的开源视觉库.他允许你使用很少的代码来检测图片或视频中的人脸. 这里有一些互联网上的教程来阐述怎么在OpenCV中使用仿射变换(affine transform)旋转图片--他们并没有处理旋转一个图片里的矩形一般会把矩形的边角切掉这一问题,所以产生的图片需要修改.当正确的使用一点代码时,这是一点瑕疵. def rotate_about_center(src, angle, scale=1.): w = src.shape[1] h = src.shape[0] ran

  • 利用Python和OpenCV库将URL转换为OpenCV格式的方法

    今天的博客是直接来源于我自己的个人工具函数库. 过去几个月,有些PyImageSearch读者电邮问我:"如何获取URL指向的图片并将其转换成OpenCV格式(不用将其写入磁盘再读回)".这篇文章我将展示一下怎么实现这个功能. 额外的,我们也会看到如何利用scikit-image从URL下载一幅图像.当然前行之路也会有一个常见的错误,它可能让你跌个跟头. 继续往下阅读,学习如何利用利用Python和OpenCV将URL转换为图像 方法1:OpenCV.NumPy.urllib 第一个方

  • 在树莓派2或树莓派B+上安装Python和OpenCV的教程

    我的Raspberry Pi 2昨天刚邮到,这家伙看上去很小巧可爱. 这小家伙有4核900MHZ的处理器,1G内存.要知道,Raspberry Pi 2 可比我中学电脑实验室里大多数电脑快多了. 话说,自从Raspberry Pi 2发布以来,我收到了很多请求,要求我能写一个在它上面安装OpenCV和Python的详细说明. 因此如果你想在Raspberry Pi启动运行OpenCV和Python,就往下面看! 在博文的剩余部分,我将提供在Raspberry Pi 2 和Raspberry Pi

随机推荐