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中字典的键的使用
Aug 19 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
Python浅复制中对象生存周期实例分析
Apr 02 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
python 实现单通道转3通道
Dec 03 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
Python调用OpenCV实现图像平滑代码实例
Jun 19 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 Python
Django实现简单的分页功能
Feb 22 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 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 图片上添加透明度渐变的效果
2009/06/29 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
详解使用python crontab设置linux定时任务
2016/12/08 Python
代码分析Python地图坐标转换
2018/02/08 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
Python 多进程原理及实现
2020/12/21 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
高三励志标语
2014/06/05 职场文书
机械工程师岗位职责
2014/06/16 职场文书
安全生产年活动总结
2014/08/29 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技