cv2.error: OpenCV(4.5.1) error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier‘

opencv使用过程错误总结

    • 快速检查
    • 错误语句
    • 错误原因
    • 解决办法
        • 方法一、path换为分类器的全路径
        • 方法二、路径中斜杠用反斜杠代替
        • 方法三、换分类器
        • 方法四、下载opencv包
        • 方法五、别看
        • 新增错误

快速检查

(1)图片路径是否正确
(2)图片路径是否是绝对路径
(3)图片路径中是否含有中文
(4)分类器路径中是否含有中文

pycharm中使用opencv时出现错误:
faces = face_model.detectMultiScale(gray)
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-xeqjxthj\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’

错误语句

path = “haarcascade_frontalface_alt.xml”
face_model = cv2.CascadeClassifier(path)
faces = face_model.detectMultiScale(image_grey)

错误原因

分类器路径错误(如分类器:haarcascade_frontalface_alt.xml)
就目前看来,出现这个错误的唯一原因就是路径问题

解决办法

既然是路径原因,那么所有的解决办法都是针对路径问题!
(1)一是针对分类器路径的问题
(2)二是针对图片路径的问题

方法一、path换为分类器的全路径

如:
将错误语句中的
path = “haarcascade_frontalface_alt.xml”
替换为
path=“D:\Download\opencv\sources\data\haarcascades\haarcascade_frontalface_alt2.xml”
//根据自己的路径情况而定

另外,如果不知道自己opencv的安装路径,可以:
查看opencv的安装位置

在pychatm中使用python语句:

print(cv2.__file__)

可打印出当前使用的opencv库安装的位置

…\lib\site-packages\cv2\cv2.cp36-win_amd64.pyd

进入到cv2下可以看到一个data文件夹

data文件夹中包含各种分类器:cv2.error: OpenCV(4.5.1) error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier‘_第1张图片

方法二、路径中斜杠用反斜杠代替

方法一尝试无效后采用方法二
(1)如将path=“D:\Download\opencv\sources\data\haarcascades\haarcascade_frontalface_alt2.xml”
改为
path=“D:/Download/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml”
(2)或者:可以在路径前加r或将路径中的斜 杠""改为’\’
如:r’D:\Download\opencv\sources…’

方法三、换分类器

此方法针对于不会再报之前的错误,而是依然无法框出人脸的情况。
(该方法和本错误相关性不大,可能是因为使用的分类器效果不好导致没有框出人脸,但是函数上并不会报错)
此时可以尝试换用分类器,
如将haarcascade_frontalcatface.xml换掉
换成:
haarcascade_frontalface_alt.xml或haarcascade_frontalface_default.xml

方法四、下载opencv包

此方法针对pycharm的安装路径下含有中文。
opencv包下载地址:https://opencv.org/releases/

不再使用pycharm中安装的opencv,而是换包!(我的pycharm安装路径中含有中文,导致在pycharm中导入的库的路径中也含有中文,因此采用外部包可以解决路径问题)
下载完成后进入opencv\sources\data\haarcascades中即可看到分类器,将代码中分类器的路径换成下载后的全路径即可。

方法五、别看

在所有出现的路径中都不应该出现中文

在所有出现的路径中都不应该出现中文

在所有出现的路径中都不应该出现中文

咳咳,这是最最最重要的一条,写在最后也是希望没踩过的人再踩一次坑,深深记住教训(对以后还是有好处的)。培养一个命名的好习惯是非常重要滴(踩过天坑,心就很累)。

当然,如果有人先看到这里,那就先检查一下opencv的路径中是否包含中文。
1.如果有,可以尝试换个没有中文的路径新建一份文件,
2.如果是将opencv安装到pycharm中了,而路径中也含有中文,那可以尝试方法四。
3. 另外: img = cv2.imread(filepath)
imread方法也是不允许路径中包含中文字符的,
因此当图片读取失败或出现其他错误时可以检查图片的路径中是否含有中文。

新增错误

  1. !_ssrc.empty() in function ‘cv::cvtColor’
  2. error: (-215:Assertion failed) !ssize.empty() in function ‘resize’

这些错误的解决方案类似,原因都是函数图片导入错误的问题。

注:如有不足,还望指教

你可能感兴趣的:(人脸识别)