opencv中的人脸检测案例

案例:人脸检测

利用OpenCV中自己已经训练好的检测器

1 检测流程

  • 1.读取图片,并转换为灰度图像

  • 2.实例化人脸和眼睛检测的分类器对象

    • # 实例化级联分类器
      face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
      # 加载分类器
      face_cas.load("haarcascade_frontalface_default.xml")
      
  • 3.进行人脸和眼睛的检测

    • faceRects = face_cas.detectMultiScale(gray,scaleFactor,minNeighbors,minSize=)
      

​ 参数:

  • ​ Gray:要进行检测的人脸图像

    • scaleFactor:前后两次扫描中,搜索窗口的比例系数
    • minneighbors:目标至少被检测到minNeighbors次才会被认为是目标
    • minsize和maxsize:目标的最小尺寸和最大尺寸
  • 4.将检测结果绘制出来

2.示例:

import cv2 as cv
import matplotlib.pyplot as plt
# 1 导入图片
img = cv.imread("../image/111.jpg")
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

# 2 实例化OpenCV人类和眼睛识别的分类器
face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
face_cas.load("haarcascade_frontalface_default.xml")

eyes_cas = cv.CascadeClassifier("haarcascade_eye.xml")
eyes_cas.load("haarcascade_eye.xml")
# 3 调用识别人脸
faceRects = face_cas.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32))
for faceRect in faceRects:
    x,y,w,h = faceRect
    # 框出人脸
    cv.rectangle(img,(x,y),(x+h,y+w),(0,255,0),3)
    # 4 在识别出的人脸中进行眼睛的检测
    rol_color = img[y:y+h,x:x+w]
    rol_gray = gray[y:y+h,x:x+w]
    eyes = eyes_cas.detectMultiScale(rol_gray)
    for (ex,ey,ew,eh) in eyes:
        cv.rectangle(rol_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
## 5 检测结果绘制
plt.figure(figsize=(8,6),dpi=100)
plt.imshow(img[:,:,::-1]),plt.title('检测结果')
plt.show()

在视频中的人脸检测如下:

import cv2 as cv
import matplotlib.pyplot as plt
# 1 读取视频
cap = cv.VideoCapture("../image/676.mp4")
# 2 在每一帧数据中进行人脸识别
while(cap.isOpened()):
    ret,frame = cap.read()
    if ret == True:
        gray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
        # 3 实例化OpenCV人脸识别的分类器
        face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
        face_cas.load("haarcascade_frontalface_default.xml")
        # 4 调用人脸识别
        faceRects = face_cas.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32))
        for faceRect in faceRects:
            x,y,w,h = faceRect
            # 框出人脸
            cv.rectangle(frame,(x,y),(x+h,y+w),(0,255,0),3)
        cv.imshow("frame",frame)
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
# 5 释放资源
cap.release()
cv.destroyAllWindows()

3.总结

opencv中人脸识别的流程是:

1.读取图片,并转换成灰度图
2.实例化人脸和眼睛检测的分类器对象

# 实例化级联分类器
face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
# 加载分类器
face_cas.load("haarcascade_frontalface_default.xml")

3.进行人脸和眼睛的检测

rect = classifier.detectMultiScale(gray,scaleFactor,minNeighbors,minSize,maxsize)

4.绘制结果图像

你可能感兴趣的:(图像处理,opencv,opencv,计算机视觉,python)