python 调用摄像头,基于opencv 的人脸检测实现

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











评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值