opencv中人脸采集
时间: 2025-01-02 14:42:18 浏览: 7
### 使用 OpenCV 实现人脸采集
#### 准备工作
为了使用 OpenCV 进行人脸采集,首先需要准备一些必要的资源和环境配置。确保已经安装了 Python 和 OpenCV 库,并下载了用于检测人脸的预训练模型文件 `haarcascade_frontalface_default.xml`[^4]。
#### 初始化摄像头并加载级联分类器
在开始之前,初始化摄像头设备并与之建立连接非常重要。接着,加载 OpenCV 提供的脸部特征检测 Haar 级联分类器:
```python
import cv2
# 加载Haar级联分类器
face_cascade = cv2.CascadeClassifier('path_to_haarcascade_frontalface_default.xml')
# 打开默认摄像机(0表示第一个摄像机)
cap = cv2.VideoCapture(0)
if not cap.isOpened():
raise IOError("无法打开摄像头")
```
#### 创建窗口显示实时画面
创建一个名为 "Face Collection" 的窗口来展示捕获的画面帧以及标记出的人脸区域:
```python
cv2.namedWindow("Face Collection", cv2.WINDOW_AUTOSIZE)
```
#### 开始捕捉图像序列
进入循环读取每一帧视频流中的图像数据,并尝试从中定位所有人脸位置;一旦找到符合条件的目标,则保存该部分裁剪后的子图作为样本素材之一:
```python
count = 0 # 记录已保存的照片数量
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
for (x,y,w,h) in faces:
roi_gray = gray[y:y+h,x:x+w]
img_item = f"data/user.{str(count)}.jpg"
cv2.imwrite(img_item,roi_gray)
color = (255,0,0) # BGR颜色空间下蓝色线条框住人脸轮廓
stroke = 2 # 边界线宽度设定为两个像素点粗细度
end_x = x + w # 右边界坐标计算公式
end_y = y + h # 下边界坐标计算公式
count += 1
cv2.rectangle(frame,(x,y),(end_x,end_y),color,stroke)
cv2.imshow('Face Collection',frame)
key=cv2.waitKey(1)&0xFF
if key==ord('q') or count>=100: break # 当按下'q'键或达到指定张数时退出程序运行状态
```
这段代码实现了连续拍摄多张不同角度、表情变化等情况下的正面脸部特写照片存储至本地磁盘目录中待后续处理分析用途[^3]。
#### 清理释放资源
当完成所需数量的人脸图片收集之后,记得关闭所有由上述操作所占用的相关硬件接口及图形界面组件实例对象以节省系统资源消耗:
```python
cap.release() # 停止访问摄像装置
cv2.destroyAllWindows() # 销毁所有的OpenCV窗口
```
以上就是利用 OpenCV 完成基本版别人脸资料库构建过程的主要步骤介绍。
阅读全文