opencv3计算机视觉python语言实现pdf_OpenCV3计算机视觉 Python语言实现(4)

2 使用opencv进行人脸检测和识别

opencv地Haar级联不具有旋转不变性

Haar级联数据来源于data文件中

xml中存放的是训练后的特征池,特征size大小根据训练时的参数而定,检测的时候可以简单理解为就是将每个固定size特征(检测窗口)与输入图像的同样大小区域比较,如果匹配那么就记录这个矩形区域的位置,然后滑动窗口,检测图像的另一个区域,重复操作。由于输入的图像中特征大小不定,比如在输入图像中眼睛是50x50的区域,而训练时的是25x25,那么只有当输入图像缩小到一半的时候,才能匹配上,所以这里还有一个逐步缩小图像,也就是制作图像金字塔的流程。

import cv2

filename = 'face.jpeg'

def detect(filename):

# CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器,需要data文件夹中

#的xml文件作为输入

face_cascade = cv2.CascadeClassifier('cascades/haarcascade_frontalface_default.xml')

img = cv2.imread(filename)

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#调用CascadeClassifier类中的detectMultiScale函数对灰度图像进行人脸检测

#输入参数为scaleFactor和minNeighbors分别表示人脸检测过程中每次迭代图像地压缩率

#以及每个人脸矩形保留近邻数目的最小值

#输出为人脸矩形数组

faces = face_cascade.detectMultiScale(gray,1.3,5)

for (x,y,w,h) in faces:

cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

cv2.namedWindow('Demo')

cv2.imshow('Demo',img)

cv2.waitKey()

cv2.destroyAllWindows()

detect(filename)

import cv2

def detect(filename):

#不同的配置xml

face_cascade = cv2.CascadeClassifier('cascades/haarcascade_frontalface_default.xml')

eye_cascade = cv2.CascadeClassifier('cascades/haarcascade_eye.xml')

img = cv2.imread(filename)

gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#检测脸

faces = face_cascade.detectMultiScale(gray_img,1.3,5)

for (x,y,w,h) in faces:

#绘制人脸矩形

cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

#选择人脸矩形作为眼睛待检区域 注意opencv中y是宽,x是高

roi_gray = gray_img[y:y+h,x:x+w]

#进行眼睛检测

#限制眼睛搜索的最小尺寸为40*40像素

eyes = eye_cascade.detectMultiScale(roi_gray,1.03,5,0,(40,40))

#由于得到的坐标为roi_gray坐标,因此需要增加x和y变为img坐标

for (ex,ey,ew,eh) in eyes:

cv2.rectangle(img,(ex+x,ey+y),(x+ex+ew,y+ey+eh),(255,0,0),2)

cv2.imshow('demo',img)

cv2.waitKey()

cv2.destroyAllWindows()

detect('face3.jpeg')

人脸识别

opencv3有三种人脸识别方法,分别基于Eigenfaces、Fisherfaces以及Local Binary Pattern Histogram(LBPH)

使用Eigenfaces进行识别

import cv2

model = cv2.face.createEigenFaceRecognizer()

model.train(np.asarray(X),np.asarray(y))

params = model.predict(roi)

print 'Label:%s, Confidence:%.2f' % (params[0],params[1])

使用Fisherfaces进行识别

model = cv2.face_createFisherFaceRecognizer()

使用LBPH的人脸识别

model = cv2.face.createLBPHFaceRecognizer()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值