利用 opencv 启动笔记本上的摄像头,实时读取摄像头中的视频流, 对视频流中每一帧图像,使用 opencv 检测人脸,并在检测到的人脸 周围画一个矩形框,最后将视频流和人脸矩形框实时显示在 opencv 窗口中。利用 opencv 启动笔记本上的摄像头,实时读取摄像头中的视频流,对视 频流中每一帧图像,使用 dlib 检测 68 个人脸特征点,并在检测到的人脸 特征点画在图像帧上,最后将视频流和人脸特征点实时显示在 opencv 窗 口中。
时间: 2024-03-16 15:47:49 浏览: 84
下面是实现以上两个功能的Python程序:
```python
import cv2
import dlib
# 加载人脸检测器和特征点检测器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
# 启动笔记本上的摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取视频流中的一帧图像
ret, frame = cap.read()
if ret:
# 将图像转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
# 在检测到的人脸周围画矩形框和特征点
for (x, y, w, h) in faces:
# 用dlib获取68个特征点
rect = dlib.rectangle(int(x), int(y), int(x + w), int(y + h))
landmarks = predictor(gray, rect)
# 画矩形框
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 画特征点
for i in range(68):
x_, y_ = landmarks.part(i).x, landmarks.part(i).y
cv2.circle(frame, (x_, y_), 2, (0, 0, 255), -1)
# 显示视频流和人脸矩形框、特征点
cv2.imshow('frame', frame)
# 按下q键退出程序
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头
cap.release()
# 关闭所有窗口
cv2.destroyAllWindows()
```
这段程序首先加载了一个人脸检测器和一个特征点检测器,然后启动笔记本上的摄像头,不断地读取视频流中的每一帧图像,并对每一帧图像进行人脸检测和矩形框绘制,同时使用dlib检测68个人脸特征点,并在检测到的人脸上画出这些特征点。最后,它将处理后的视频流实时显示在一个OpenCV窗口中,并且等待用户按下q键退出程序。
阅读全文