您的位置:首页 > 编程语言 > Python开发

基于opencv-python 实现人脸识别,每一步都有解释。

2018-11-21 12:50 543 查看
  • 本人新手,只是拿别人代码练手,中间遇到的情况 以此记录一下,方便后续查看,如有问题,恳请大佬们指正!*
import cv2

patha ="C:\\Users\\LYD\\Desktop\\haarcascade_frontalface_alt2.xml"
faceCascade = cv2.CascadeClassifier(patha)#分类器的使用
#填(0)表示插入摄像头,或者一段视频(插入视频的话用绝对路径)
video_capture = cv2.VideoCapture("C:\\Users\\LYD\\Desktop\\123.mp4")
while True:
#video_capture表示按帧读取视频,ret,frame获取两个返回值
# ,ret为布尔型,如果读取是正确的,则返回true,视频读完则返回false。
#frame表示读取的每一帧图像
ret, frame = video_capture.read()
#cvtColor()是颜色空间转换函数,此时将每一帧图像转换为灰度图。
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#detectMultiscale()可以检测图片中所有的人脸,并将人脸用
# vector保存各人脸的坐标、大小(用矩形表示),函数由分类器对象调用
faces = faceCascade.detectMultiScale(
gray,#视频传下来的每一帧灰度图
scaleFactor=1.1,#表示在前后两次相继的扫描中,搜索窗口的比例系数,默认1.1,即每次搜索窗口依次扩大10%
minNeighbors=3,#表示构成检测目标的相邻矩形的最小个数 (默认为3)
#如果组成检测目标的矩形个数的和小于min_neighbors -1 都会被排除,
# 若minineighbors为0.则什么也不做,返回所有的被检候选矩形框
minSize=(30, 30),#用来限制检测目标区域的范围
flags=cv2.cv2.CASCADE_SCALE_IMAGE  #这一行代码可以不用,具体什么作用,我没查到
)
# 面部画框
for (x, y, w, h) in faces:
#第一个参数:frame是原图,
# 第二个参数:(x,y)是矩阵的左上点坐标,
# 第三个参数:(x+w,y+h)是矩阵的右下点坐标,
# 第四个参数:(0,255,0)是画线对应的rgb颜色,
# 第五个参数:2是所画的线的宽度
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
#显示图片
cv2.imshow('Video', frame)   #imshow()就是显示图片
if cv2.waitKey(1) & 0xFF == ord('q'):
#cv2.waitKey(1) 1为参数,单位毫秒,表示间隔时间
# ord(' ')将字符转化为对应的整数(ASCII码)
# 0xFF是十六进制常数,二进制值为11111111。
# 通过使用位和(和)这个常数,它只留下原始的最后8位
# (在这种情况下,无论CV2.WaITKEY(0)是),此处是防止BUG。
break

video_capture.release()     # 运行视频。
cv2.destroyAllWindows()   #cv2.destroyWindows():删除指定的窗口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: