【Opencv3+Python3入门(21)人脸检测】
人脸检测主要利用Opencv中的API与其中封装好的Haar人脸特征数据(小数部分较多计算更复杂)以及LBP数据(多数为整数计算)来调用进行人脸识别的任务。若下载安装了Opencv,则其文件中包含数据,或者可以取其github网站上下载文件。Haar特征数据下载地址:https://github.com/opencv/opencv/blob/master/data/haarcascad...
人脸检测
主要利用Opencv中的API与其中封装好的Haar人脸特征数据(小数部分较多计算更复杂)以及LBP数据(多数为整数计算)来调用进行人脸识别的任务。
若下载安装了Opencv,则其文件中包含数据,或者可以取其github网站上下载文件。
Haar特征数据下载地址:https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt_tree.xml
LBP特征数据下载地址:
https://github.com/opencv/opencv/blob/master/data/lbpcascades/lbpcascade_frontalcatface.xml
## 21,人脸识别
import cv2 as cv
import numpy as np
def face_Detect(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
#把下载好的Haar特征数据文件放在指定文件下,利用cv.CascadeClassifier类实例化读入
face_detector = cv.CascadeClassifier("F:\jupytertf\haarcascade_frontalface_alt_tree.xml")
#把下载好的LBP特征数据文件放在指定文件下,利用cv.CascadeClassifier类实例化读入
#face_detector = cv.CascadeClassifier("F:\jupytertf\lbpcascade_frontalcatface.xml")
#如果检测不出来人脸需要对函数detectMultiScale后面的两个参数进行调整
#detectMultiScale该函数表示在多个尺度空间对其进行人脸检测,
#参数2:1.01表示上下尺度为原图像的1.01倍。
#参数3,表示一个人脸被框了几次才认为是人脸,如果过高有可能检测不出来人脸;过低,有可能检测出来不是人脸
faces = face_detector.detectMultiScale(gray, 1.01, 1)
for x, y, w, h in faces:
#利用画矩形框的函数将人脸框出
#(0, 0, 255)表示颜色,2表示线宽
cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
#显示检测结果
cv.imshow("Face_Detect", image)
src = cv.imread(r'F:\OutputResult\SrcImage\lena.jpg')
#可选择性地将原图像缩放至规定尺寸
src=cv.resize(src,(512,512),cv.INTER_CUBIC)
cv.imshow("src",src)
face_Detect(src)
# #摄像头读取并检测人脸
# #实例化一个capture类
# capture=cv.VideoCapture(0)#参数为0表示从摄像头读取视频,为文件路径表示读取视频文件
# cv.namedWindow("Face_Detect", cv.WINDOW_AUTOSIZE)
# while(True):
# ret, frame = capture.read()
# frame = cv.flip(frame, 1)
# face_Detect(frame)
# c = cv.waitKey(40)
# if c == 27: # ESC
# break
cv.waitKey(0)
cv.destroyAllWindows()
函数:
cv.CascadeClassifier.detectMultiScale(image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]])
在输入图像中检测不同大小的对象。检测到的对象作为矩形列表返回。其中每个矩形包含检测到的对象,矩形可能部分位于原始图像之外。
image:包含检测到对象的图像的cv_8u类型的参数图像矩阵。
scaleFactor参数:指定在每个图像比例下图像大小减小的程度。
minneighbors参数:指定每个候选矩形应保留多少邻居。
flags:为与函数cvhaardetectobjects中相同的旧级联含义。它不用于新的级联。
minSize:最小可能对象大小。小于的对象将被忽略。
maxSize:最大可能对象大小。大于的对象将被忽略。如果“maxsize==minsize”,则模型将按单个比例进行计算。
检测结果:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)