最近学习图像处理,用到OpenCV的detectMultiScale方法检测人脸,但是对它的参数的含义不太理解,于是各种查资料和测试效果,下面把学习的过程和个人理解总结一下。
1、准备环境
我用的是python3.6 + PyCharm,并且安装了OpenCV及相关的库。
然后下载Haar级联的XML,放在代码工程目录下。
下载地址:https://download.csdn.net/download/leaf_zizi/12667450
再借用《浪姐》的一张人脸图片,像素300*200。
2、编写代码
import cv2
# 读取照片,转换成灰度图
img1 = cv2.imread("langjie.jpg")
gray_img = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
# 将级联算法加载到一个变量中
haar_face_cascade = cv2.CascadeClassifier(
'haar\haarcascade_frontalface_alt.xml')
# 识别图像中的人脸,返回所有人脸的矩形框向量组
# scaleFactor 为了检测到不同大小的目标,通过scalefactor参数把图像长宽同时按照一定比例(默认1.1)逐步缩小,
# 然后检测,这个参数设置的越大,计算速度越快,但可能会错过了某个大小的人脸。
# minNeighbors 构成检测目标的相邻矩形的最小个数,默认值是3
faces = haar_face_cascade.detectMultiScale(gray_img, scaleFactor=1.1,
minNeighbors=3)
# 在图像中画上矩形框
for (x, y, w, h) in faces:
cv2.rectangle(img1, (x, y), (x + w, y + h), (0, 255, 0), 1)
# 显示结果
cv2.imshow("Final_detected_image", img1)
cv2.waitKey(0)
看一下识别的效果,发现有两个人脸没有识别到,作为一个“较真儿”的人,我需要研究一下detectMultiScale参数的含义。