Python3.7,pycharm3.7,opencv实现静态图片的人脸检测。
import cv2
#选择分类器,注意路径为绝对值,安装了opencv后,可以在电脑中搜素cv2,找到data文件夹的haar分类器文件
face_cascade = cv2.CascadeClassifier(r'C:\Users\dongz\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
#此处为相对路径,即项目文件夹下
image = cv2.imread('ko.jpg')
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#调用分类器的检测函数detectMultiScale,后面参数的设置可以让检测结果更加准确。
faces = face_cascade.detectMultiScale(gray,scaleFactor = 1.3,minNeighbors = 6,
minSize = (6,6),flags = cv2.CASCADE_SCALE_IMAGE)
for(x,y,w,h) in faces:
#矩形的各种参数,image图像,xy,矩形的左上角和右下角坐标,矩形颜色,线条宽度
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
cv2.imshow("tianguaandlaoke",image)
cv2.waitKey(0)
#Esc退出
import cv2
用的是opencv中的harr分类器分类器,也可用其他的,常用是这个,选择分类器的时候注意决定路径的选择,找到cv2的安装文件夹,找到这个分类器,否则容易报错。报错形式如下:
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1658: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'
将图像进行灰度处理,方便后面的检测。
调用级联分类器下的检测函数detectMultiScale,函数有多个参数,参数的调试会影响识别的准确率,可以手动修改一下。
image–待检测图片,一般为灰度图像加快检测速度;
scaleFactor–表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
minNeighbors–表示构成检测目标的相邻矩形的最小个数(默认为3个)。
flags–可不设置,使用默认值
minSize和maxSize用来限制得到的目标区域的范围。
rectangle的各个参数这里就不做详细介绍了。