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)

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>