基于OpenCV包14行代码实现人脸检测:只是实现人脸检测,并没有实现人脸识别,还得提前进行训练才行。
软件:spyder
提前导入:pip install openCV-python
可以加链接提高数倍下载速度,具体请参考第一篇文章。
代码以及详细解释:

"""
Created on Thu Apr 30 15:25:04 2020

@author: dongdong
"""
import cv2
#输入待检测人脸
img = cv2.imread("test3.jpg") #需要自己将jpg格式的图片放置到和此代码放到同一根目录下。
#将图像转换为灰度图像,因为opencv人脸检测器需要灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #【3】创建Cascade分类器
    #CascadeClassifier的参数为人脸层级检测器模板文件路径
faceCascade=cv2.CascadeClassifier(cv2.data.haarcascades
     + "haarcascade_frontalface_default.xml")#采用基于样本的Haar特征进行的分类器训练.
    # 调用detectMultiScale功能检测图像中的人脸
"""
第一个参数gray:为传入灰度图像;
第二个参数scaleFactor:由于通常越靠近相机的人脸会越大,scaleFactor比例因子对人脸大小进行补偿,在处理远近大小差别很大的人脸图像时需要进行具体调整;
第三个参数minNeighbors:该算法使用移动窗口来检测对象,minNeighbors设置在当前对象窗口需要检测多少个窗口
第四个参数minSize:设置每个窗口的大小;
第五个参数flags:返回检测到人脸的坐标矩阵列表。
"""
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, 
                                     minSize=(30,30), flags=cv2.CASCADE_SCALE_IMAGE)

#将检测到的人脸用矩形标识
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2) #x,y这里指的是水平和竖直方向。
"""
# 将图像输出保存到本地
#cv2.imwrite("test_fr.png",image)
"""
#将图片窗口化输出
cv2.namedWindow("picture")#输出图片名称
cv2.imshow("picture", img)

cv2.waitKey(0)#waitKey()函数的功能是不断刷新图像,如果设置waitKey(0),代表按任意键继续,如果使用视频的话,得大于0
cv2.destroyAllWindows()

例如测试图片:
在这里插入图片描述
结果展示:
在这里插入图片描述
that‘s all,thank you

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐