python

#!/usr/bin/python
# -*- coding: UTF-8 -*-
  
# face_detect.py
  
# Face Detection using OpenCV. Based on sample code from:
  
# Usage: python face_detect.py 
  
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)