基于opencv实现简单人脸检测

作用:在视频中自动检测出人脸

使用内容:灰度转换,分类器,矩形框选,圆形框选,摄像头读取及释放

代码逻辑:

  1. 先读取摄像头后,
  2. 对摄像头拍摄到的图片进行逐帧分析,
  3. 并对图像进行灰度转换后使用类选择器识别,
  4. 最后将识别出来的部分用矩形框和圆形框框选,
  5. 在把图片返回,
  6. 然后打印图片帧的坐标,
  7. 如果检测键盘摁下q那么解释结束循环
  8. 释放内存和摄像头。
import cv2 as cv


def face_detect_demo(img):
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    face_detect = cv.CascadeClassifier('E:/opencv/opencv-4.6.0/data/haarcascades/haarcascade_frontalface_alt2.xml')
    face = face_detect.detectMultiScale(gray)
    for x, y, w, h in face:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
        cv.circle(img, center=(x + w // 2, y + h // 2), radius=(w // 2), color=(255, 0, 0), thickness=2)
    cv.imshow('result', img)


# 读取摄像头
cap = cv.VideoCapture(0, cv.CAP_DSHOW)
# cap = cv.VideoCapture('picture/arti.mp4')
# 循环
while True:
    flag, frame = cap.read()
    if not flag:
        break
    face_detect_demo(frame)
    print(frame, frame.shape)
    if ord('q') == cv.waitKey(1):
        break
# 释放内存
cv.destroyAllWindows()
# 释放摄像头
cap.release()

总结:
主要是调用了opencv里面的分类器的库,需要注意的是圆形框选对象时计算好框选的位置范围。

posted @ 2022-12-06 23:19  筝弈  阅读(66)  评论(0编辑  收藏  举报
2 3
4