OpenCV Haar人脸识别导入错误:empty() in function detectMultiScale

error: empty() in function detectMultiScale

这个问题,stackoverflow上有一个完美的解决方案:error: (-215) !empty() in function detectMultiScale

解决方案如下:

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

换成

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')

即可。

亲测有效。

OpenCV 人脸识别

OpenCV内部提供了三种不同的训练好的级联分类器。

级联分类器的优势是,在开始阶段仅进行非常简单的判断,就能够排除明显不符合要求的实例。

但是,根据以下这张图的秒描述,OpenCV内部提供的这个算法是用的人提供的特征量,属于机器学习的范畴。来自鱼书
比如我用以下代码进行测试:

# 读取待检测的图像
image = cv2.imread('images/samsung.jpg')
# 获取XML文件,加载人脸检测器
# faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 色彩转换,转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 调用函数detectMultiScale
faces = face_cascade.detectMultiScale(
    gray,
    scaleFactor = 1.15,
    minNeighbors = 5,
    minSize = (5,5)
)
print(faces)
# 打印输出的测试结果
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, (int((x+x+w)/2), int((y+y+h)/2)), int(w/2), (0,255,0),30)
# 显示结果
show(image)
# 保存检测结果
cv2.imwrite("re.jpg", image)

结果如下:
请添加图片描述
可以发现效果并不是很理想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DaydreamHippo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值