Python+OpenCV3人脸检测出现错误代码:error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale

一、环境:

Windows10

Python 3.6.4

OpenCV 3.4.1(安装方式为:pip install    opencv_python‑3.4.1‑cp36‑cp36m‑win32.whl 

cascades(人脸识别haar特征级联分类器)文件夹内容下载地址:

https://github.com/opencv/opencv/tree/master/data/haarcascades

注意:最终发现此下载方法文件出现问题

二、报错代码

import cv2

filename='face.jpg'

def detect(filename):

face_cascade = cv2.CascadeClassifier('./cascades/

                        haarcascade_frontalface_default.xml')

img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.3,5)
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.namedWindow("vikings detected")
cv2.imshow("/vikings detected",img)
cv2.waitKey(0)

detect(filename)


运行代码出现错误代码:cv2.error: OpenCV(3.4.1) D:\Build\OpenCV\opencv-3.4.1\modules\objdetect\src\casc

adedetect.cpp:1698: error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale

措施:

1、按照网上查询的资料,大部分的问题是设置分类器xxxx.xml绝对路径,可依据各种方法设置在运行代码时,同样出现以上错误代码;

2、依据另一份网络参考在

face_cascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')后追加,

face_cascade.load('D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')方法,依然无用;

3、另一种方法为:重新卸载Python及OpenCV,重装anaconda及OpenCV,尝试后依然无效;

最终方案:

(一)

1、下载opencv-3.4.1-vc14_vc15.exe,将文件放入C:\Users\John\AppData\Local\Programs\Python\Python36-32\Lib\site-packages文件目录,点击执行文件,生成OpenCV文件夹,内含文件夹‘\sources\data\haarcascades’内包含所有分类器文件xxxx.xml;

2、依据错误代码提示,在本地建立错误代码指出的指定路径:D:\Build\OpenCV\opencv-3.4.1\modules\objdetect\src\cascadedetect,将文件夹路径C:\Users\John\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\opencv\sources\data\haarcascades中分类器文件复制粘贴到本地建立的指定路径中;

3、修改源代码路径:

修改代码如下:

import cv2
import numpy as np


filename='face.jpg'
path='D:\Build\OpenCV\opencv-3.4.1\modules\objdetect\src\cascadedetect'


def detect(filename):
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face_cascade.load(path+'\haarcascade_frontalface_default.xml')

img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.3,5)
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.namedWindow("vikings detected")
cv2.imshow("vikings detected",img)
cv2.waitKey(0)

detect(filename)


再次运行,代码运行成功,可进行人脸识别!!!!如图所示:


(二)绝对路径中出现转义字符\,在Python中,Windows环境反斜杠“\",会将原始路径发生转义,如"\n",如果在路径中出现"\new",将无法读取路径,解决办法,绝对路径前加“r”,如:

r'D:\python_work\face_detect\cascades\haarcascade_frontalface_default.xml'


总结:

出现代码错误的原因可能是需要建立OpenCV库调用的指定路径;

绝对路径中出现转义字符“\”,Python在调用路径时发生转义,无法得到完整路径,在绝对路径前加“r此方法为正确方法);


参考链接:

https://blog.csdn.net/serena9636/article/details/52530446

https://blog.csdn.net/m0_37908464/article/details/79433630


  • 17
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值