在OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Haar特征和LBP特征。使用已经训练好的XML格式的分类器进行人脸检测。在OpenCV的安装目录下的sources文件夹里的data文件夹里可以看到下图所示的内容(opencv\sources\data\haarcascades )
#-*-coding:utf8-*-#
import cv2
def detectFaces(img):
face_cascade = cv2.CascadeClassifier("C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt2.xml")
if img.ndim == 3:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
else:
gray = img
faces = face_cascade.detectMultiScale(gray, 1.2, 5)
result = []
for (x,y,width,height) in faces:
result.append((x,y,x+width,y+height))
return result
def drawFaces(img):
faces = detectFaces(img)
if faces:
for (x1,y1,x2,y2) in faces:
cv2.rectangle(img,(x1,y1),(x2,y2),(225,105,65),3)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'FaceDetection',(x1,y1-5), font, 1,(255,0,255),2)
return img
def main():
f = "./video.wmv"
wd = "Window's name!"
capture = cv2.VideoCapture(0)
#save as video
#fourcc = cv2.cv.CV_FOURCC(*'XVID')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc,20.0,(720,400))
while(capture.isOpened()):
ret,img = capture.read()
img = drawFaces(img)
if ret == True:
out.write(img)
cv2.imshow(wd,img)
#press 'q' to quit
c = cv2.waitKey(1)
if c&0xFF == ord('q'):
break
#release
capture.release()
out.release()
cv2.destroyAllWindows()
main()