装好opencv之后,将opencv里面source里的data全部考到自己的py代码文件目录下,运行即可。先调用摄像头,抓取一张照片,按下按键,然后检测人脸,用框标注,再按下按键,保存照片,接着抓取。直到按q退出。
每一句代码写得都很详细,容易看懂。识别人脸的特征,可以使用haar算法(引入haarcascade_frontalface_alt),也可以使用LBP(引入lbpcascade_frontalface)
只是找了相关的代码,拼凑而成,起码是个连续的例子,还有不少改进的空间,以后有时间慢慢来吧
from numpy import *
import cv2
##########################开启摄像头#############
capture=cv2.VideoCapture(0)
#将capture保存为motion-jpeg,cv_fourcc为保存格式
size = (int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),
int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))
#cv_fourcc值要设置对,不然无法写入,而且不报错
video=cv2.VideoWriter("VideoTest.avi", cv2.cv.CV_FOURCC('I','4','2','0'), 30, size)
#isopened可以查看摄像头是否开启
print capture.isOpened()
##########################图像检测准备工作#############
#face_cascade = cv2.CascadeClassifier('data/haarcascades/haarcascade_frontalface_alt.xml')
face_cascade = cv2.CascadeClassifier('data/lbpcascades/lbpcascade_frontalface.xml')
#img = cv2.imread("5.jpg")#从硬盘读
#########################################
num=0
while True:
#视频中的图片一张张写入
ret,img=capture.read()
video.write(img)
#显示并写硬盘
cv2.imshow('img',img)
cv2.imwrite('%s.jpg'%(str(num)),img)
#暂停一下等待按键
key=cv2.waitKey(0)#里面数字为delay时间,如果大于0为刷新时间,
#超过指定时间则返回-1,等于0没有返回值,但也可以读取键盘数值
#######################检测人脸代码#####################
grayimg=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#灰度转换
faces_rect = face_cascade.detectMultiScale(grayimg,1.2,3)#得到一个矩形,faces是多个矩形(一个脸一个)
#将多个脸用框画出来
for (x,y,w,h) in faces_rect:
img2= cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,255),2)
roi_gray = grayimg[y:y+h,x:x+w]
roi_color = img[y:y+h,x:x+w]
cv2.imshow('img',img)
key=cv2.waitKey(0)
cv2.imwrite('%s.header.jpg'%(str(num)),img)
############################################
num=num+1
if key==ord('q'):#ord为键盘输入对应的整数,
break
video.release()
#如果不用release方法的话无法储存,要等结束程序再等摄像头关了才能显示保持成功
capture.release()#把摄像头也顺便关了
cv2.destroyAllWindows()