人脸检测需要使用人脸检测分类器,由于opencv的安装是用pip安装的,所以缺少人脸检测分类器,可在以下链接下载。
https://github.com/opencv/opencv
下载完成后解压,将文件夹,随便放在一个地方,记住haarcascade_frontalface_alt_tree.xml的地址
检测图相中的人脸
import cv2 as cv
import numpy as np
def face_detect_image(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
face_detector = cv.CascadeClassifier("F:/opencv-master/data/haarcascades/haarcascade_frontalface_alt_tree.xml")
faces = face_detector.detectMultiScale(gray, 1.02, 5) # 第二个参数是移动距离,第三个参数是识别度,越大识别读越高
for x, y, w, h in faces:
cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2) # 后两个参数,一个是颜色,一个是边框宽度
cv.imshow("result", image)
src = cv.imread('F:001.jpg')
#cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)
cv.imshow("0", src)
face_detect_image(src)
cv.waitKey(0)
cv.destroyAllWindows()
输出结果:
检测视频流中的人脸
import cv2 as cv
import numpy as np
def face_detect_image(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
face_detector = cv.CascadeClassifier("F:/opencv-master/data/haarcascades/haarcascade_frontalface_alt_tree.xml")
faces = face_detector.detectMultiScale(gray, 1.02, 5) # 第二个参数是移动距离,第三个参数是识别度,越大识别读越高
for x, y, w, h in faces:
cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2) # 后两个参数,一个是颜色,一个是边框宽度
cv.imshow("result", image)
capture = cv.VideoCapture(0)
while (True):
ret, frame = capture.read()
frame = cv.flip(frame, 1) # 对视频做一个镜像对称变化
face_detect_image(frame)
c = cv.waitKey(50)
if c == 27: # 如果按下Esc键,退出视频
break
输出结果: