Python3.7+OpenCV3 人脸检测中的那些坑
一、先看程序
此程序实现的图像中的人脸检测,不同的图像检测的精度可能略有差异。
# coding=gbk
import cv2
# 待检测的图片路径
# 获取训练好的人脸的参数数据,这里直接从GitHub上使用默认值
pathf='C:\\Users\Derek\AppData\Local\Programs\Python\Python37\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(pathf)
# 读取图片
image = cv2.imread("D://Python/Picture/Kobe.jpg")
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# 探测图片中的人脸
faces = face_cascade.detectMultiScale(
gray,
scaleFactor = 1.15,
minNeighbors = 5,
minSize = (5,5),
flags = cv2.CASCADE_SCALE_IMAGE
)
print("发现{0}个人脸!".format(len(faces)))
for(x,y,w,h) in faces:
# cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
cv2.circle(image,((x+x+w)//2,(y+y+h)//2),w//2,(0,255,0),2)
cv2.imshow("Find Faces!",image)
cv2.waitKey(0)
二、检测结果:
三、踩坑合集
- 坑一:编码模式
如果不写# coding=gbk报错
Non-UTF-8 code starting with ‘\xb4’ in file D:/Python/Project/opencvtest.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
2. 坑二:直接写分类器报错
直接写
face_detector = cv.CascadeClassifier("haarcascade_frontalface_alt_tree.xml")
会报错。
为了解决这个问题,需要在前面用绝对路径写出来,也就是你在python中的安装的位置
pathf='C:\\Users\Derek\AppData\Local\Programs\Python\Python37\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(pathf)
- 坑三:cv2和cv3中函数名不同
CV2中的
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
flags = cv2.cv.CV_HAAR_SCALE_IMAGE
在CV3中换了名称:
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
flags = cv2.CASCADE_SCALE_IMAGE
4.坑四:运算符
cv2.circle(image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)
应在/后再加一条/
cv2.circle(image,((x+x+w)//2,(y+y+h)//2),w//2,(0,255,0),2)