您的位置:首页 > 编程语言 > Python开发

Python3.7+OpenCV3 人脸检测中的那些坑

2019-01-22 17:44 134 查看

一、先看程序

此程序实现的图像中的人脸检测,不同的图像检测的精度可能略有差异。

# 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)

二、检测结果:

三、踩坑合集

  1. 坑一:编码模式
    如果不写# 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)
  1. 坑三: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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: