opencv进行人脸识别并截取人脸图像建立人脸图像库C++
时间: 2023-10-09 18:16:08 浏览: 145
在使用OpenCV进行人脸识别之前,需要先进行人脸检测。OpenCV提供了Haar特征检测器来进行人脸检测,可以使用已经训练好的分类器进行检测。
以下是进行人脸识别并截取人脸图像建立人脸图像库的步骤:
1.导入OpenCV库和其它必要的库:
```
import cv2
import os
import numpy as np
```
2.加载已经训练好的人脸分类器:
```
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
```
3.打开摄像头或读取视频文件:
```
cap = cv2.VideoCapture(0) #打开摄像头
#cap = cv2.VideoCapture('test.mp4') #读取视频文件
```
4.读取每一帧图像并进行人脸检测:
```
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
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)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
```
5.将检测到的人脸图像保存到指定路径:
```
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
cv2.imwrite(os.path.join('C:/face_images', 'face_'+str(count)+'.jpg'), roi_color)
count += 1
```
其中,'C:/face_images'为指定的人脸图像保存路径,'count'为计数器,确保每张人脸图像的文件名不重复。
6.释放摄像头或关闭视频文件:
```
cap.release()
cv2.destroyAllWindows()
```
7.最终的完整代码如下所示:
```
import cv2
import os
import numpy as np
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0) #打开摄像头
#cap = cv2.VideoCapture('test.mp4') #读取视频文件
count = 0
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
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)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
cv2.imwrite(os.path.join('C:/face_images', 'face_'+str(count)+'.jpg'), roi_color)
count += 1
cv2.imshow('img',img)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
```
运行代码后,OpenCV会打开摄像头或读取视频文件,并进行人脸检测。每当检测到一张人脸图像时,就会保存到指定路径下的人脸图像库中。可以在保存的人脸图像库中查看保存的人脸图像。
阅读全文