初学OpenCV,欢迎大佬请多多指点,嘿嘿
源码如下:
import cv2.cv2 as cv
import matplotlib.pyplot as plt
# 读取视频
cap = cv.VideoCapture(0)
# 对每一帧数据进行人脸检测
while (cap.isOpened()):
ret,frame = cap.read()
if ret == True:
gray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
# 实例化人脸检测分类器
face_cas = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
face_cas.load('haarcascade_frontalface_default.xml')
face_rects = face_cas.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32))
for facerect in face_rects:
x,y,w,h = facerect
# 框出人脸
cv.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),3)
cv.imshow('frame',frame)
if cv.waitKey(1)&0xff == ord('d'):
break
# 释放资源
cap.release()
cv.destroyAllWindows()
使用import cv2.cv2 as cv为了解决在pycharm中使用cv2包内置函数的时候没有代码补全提示的问题
首先读取视频,并检测视频是否正确被读取,然后对提取出的每一帧图像进行灰度处理。
CascadeClassifier是OpenCV中做人脸检测的时候的一个级联分类器。其参数为人脸检测模型,代码中的参数为OpenCV自带的人脸检测的模型,实例化完人脸检测模型后并加载该模型到一个变量中
对于dectectMultiScale函数,我始终弄不懂它的意义直到看到这篇文章---Python学习笔记(8)——我对OpenCV人脸检测方法detectMultiScale参数的理解 - it610.com
对于该函数我的理解如下:
①参数image:首先该函数检测图像是灰度图
②参数scaleFactor:缩放比例,haar级联分类器采用的是滑动窗口检测的方法,每次窗口画出图像后进行大小调整后再搜索直到无法缩小,如果检测的图像像素值比较大,则可以设置的大一点(拢共可以设置的大小为1.0-1.5)
③参数minNeighbors: 查阅了很多文章,但是还是没有很好的理解这个参数的意义,我的理解如下供大家参考:函数进行人脸检测时,会返回人脸矩阵,在很多人同框的时候,返回难免会出现错误,而该参数可以消除这种错误,简单来说就是该参数表示构成人脸目标的相邻矩阵的最小个数(默认是三个),相当于验证,当为0的时候显示所有框选区,当值增大后,目标选择速度加快,但是许多细节则会被忽略文章来源:https://www.toymoban.com/news/detail-422561.html
④参数minSize和maxSize:设置检测对象的最大最小值,低于minSize和高于maxSize的话就不会检测出来。文章来源地址https://www.toymoban.com/news/detail-422561.html
到了这里,关于视频人像检测(OpenCV)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!