以下是Python OpenCV调用摄像头检测人脸并截图的完整攻略:
准备工作
首先,需要安装OpenCV库和Python环境。可以选择通过pip进行安装:
pip install opencv-python
打开摄像头
首先,在Python中调用摄像头需要用到OpenCV的cv2.VideoCapture()方法,通过传入摄像头编号或者视频文件路径来打开摄像头:
import cv2
cap = cv2.VideoCapture(0)
检测人脸
接着,需要使用OpenCV的人脸检测算法Haar Cascade来检测人脸。这个算法需要预先下载Haar Cascade分类器(也可以自己训练),然后通过cv2.CascadeClassifier()方法导入分类器,并使用detectMultiScale()方法来检测人脸:
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
截图
接下来,用cv2.rectangle()方法将检测到的人脸框起来,并利用cv2.imwrite()方法把截图保存下来:
for (x,y,w,h) in faces:
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
cv2.imwrite("face.jpg", roi_color)
break
完整代码
以下是完整的Python OpenCV调用摄像头检测人脸并截图的代码:
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
cv2.imwrite("face.jpg", roi_color)
break
cv2.imshow('img',frame)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
示例说明
- 单人脸识别
如上所示的完整代码可以实现对摄像头中单个人的识别,即能够在屏幕中只框出一个人脸,并将其截图保存。
- 多人脸识别
在上述的示例中,Haar Cascade人脸检测算法可以检测到多个人脸。如果想要同时将多个人脸框起来,并将其截图保存,可以使用一个循环语句对所有人脸进行检测。
```for (x,y,w,h) in faces:
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
cv2.imwrite("face{}.jpg".format(i), roi_color)
i += 1```
在上述代码中,i是一个计数器,用来给每个人脸图片命名。由于可能有多张人脸图片,因此每个图片的名字应该是独立的,可以使用字符串格式化的方法来实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python OpenCV调用摄像头检测人脸并截图 - Python技术站