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 字符串操作方法大全
Mar 11 Python
Python中str.format()详解
Mar 12 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
Python2和Python3的共存和切换使用
Apr 12 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
Oct 11 Python
python模块导入的方法
Oct 24 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
python爬虫爬取某网站视频的示例代码
Feb 20 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
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
python实现绘制树枝简单示例
2014/07/24 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
Python小进度条显示代码
2019/03/05 Python
Python的logging模块基本用法
2020/12/24 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
自我鉴定范文200字
2013/10/02 职场文书
竞争上岗实施方案
2014/03/21 职场文书
爱心活动计划书
2014/04/26 职场文书
反邪教标语
2014/06/23 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
法定授权委托证明书
2014/09/27 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
会议新闻稿
2015/07/17 职场文书
入党宣誓大会后的感想
2015/08/10 职场文书
详解flex:1什么意思
2022/07/23 HTML / CSS