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


Posted in Python onApril 18, 2014

OpenCV的人脸检测功能在一般场合还是不错的。而ubuntu正好提供了python-opencv这个包,用它可以方便地实现人脸检测的代码。

写代码之前应该先安装python-opencv:

$ sudo apt-get install python-opencv

具体原理就不多说了,可以参考一下这篇文章。直接上源码。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# face_detect.py
# Face Detection using OpenCV. Based on sample code from:
# http://python.pastebin.com/m76db1d6b
# Usage: python face_detect.py <image_file>
import sys, os
from opencv.cv import *
from opencv.highgui import *
from PIL import Image, ImageDraw
from math import sqrt
def detectObjects(image):
    """Converts an image to grayscale and prints the locations of any faces found"""
    grayscale = cvCreateImage(cvSize(image.width, image.height), 8, 1)
    cvCvtColor(image, grayscale, CV_BGR2GRAY)
    storage = cvCreateMemStorage(0)
    cvClearMemStorage(storage)
    cvEqualizeHist(grayscale, grayscale)
    cascade = cvLoadHaarClassifierCascade(
        '/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml',
        cvSize(1,1))
    faces = cvHaarDetectObjects(grayscale, cascade, storage, 1.1, 2,
        CV_HAAR_DO_CANNY_PRUNING, cvSize(20,20))
    result = []
    for f in faces:
        result.append((f.x, f.y, f.x+f.width, f.y+f.height))
    return result
def grayscale(r, g, b):
    return int(r * .3 + g * .59 + b * .11)
def process(infile, outfile):
    image = cvLoadImage(infile);
    if image:
        faces = detectObjects(image)
    im = Image.open(infile)
    if faces:
        draw = ImageDraw.Draw(im)
        for f in faces:
            draw.rectangle(f, outline=(255, 0, 255))
        im.save(outfile, "JPEG", quality=100)
    else:
        print "Error: cannot detect faces on %s" % infile
if __name__ == "__main__":
    process('input.jpg', 'output.jpg')
Python 相关文章推荐
python 获取本机ip地址的两个方法
Feb 25 Python
Python中实现对list做减法操作介绍
Jan 09 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
Python任意字符串转16, 32, 64进制的方法
Jun 12 Python
python取余运算符知识点详解
Jun 27 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
python相对企业语言优势在哪
Jun 12 Python
给Django Admin添加验证码和多次登录尝试限制的实现
Jul 26 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
python装饰器三种装饰模式的简单分析
Sep 04 Python
在python的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 #Python
Python操作json数据的一个简单例子
Apr 17 #Python
python使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 #Python
python调用windows api锁定计算机示例
Apr 17 #Python
python实现监控windows服务并自动启动服务示例
Apr 17 #Python
解决python写的windows服务不能启动的问题
Apr 15 #Python
Python和php通信乱码问题解决方法
Apr 15 #Python
You might like
地摊中国 - 珍藏老照片
2020/08/18 杂记
php array的学习笔记
2012/05/10 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
更改localhost为其他名字的方法
2014/02/10 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
javascript解析json实例详解
2014/11/05 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
JS判断数组那点事
2017/10/10 Javascript
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
node创建Vue项目步骤详解
2020/03/06 Javascript
vue 使用async写数字动态加载效果案例
2020/07/18 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
Python中 Lambda表达式全面解析
2016/11/28 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
python实现kmp算法的实例代码
2019/04/03 Python
Python continue语句实例用法
2020/02/06 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
外贸销售员求职的自我评价
2013/11/23 职场文书
垃圾桶标语
2014/06/24 职场文书
政审证明范文
2015/06/19 职场文书
推普标语口号大全
2015/12/26 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
Go web入门Go pongo2模板引擎
2022/05/20 Golang