装好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()