OpenCV 3.0.0 FaceDetect 示例失败

2022-09-04 06:30:54

我正在尝试让OpenCV运行,我正在使用以下示例代码

我得到以下错误行显示:

OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale, file ..\..\..\..\opencv\modules\objdetect\src\cascadedetect.cpp, line 1580
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: ..\..\..\..\opencv\modules\objdetect\src\cascadedetect.cpp:1580: error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale
]
    at org.opencv.objdetect.CascadeClassifier.detectMultiScale_1(Native Method)
    at org.opencv.objdetect.CascadeClassifier.detectMultiScale(CascadeClassifier.java:176)
    at org.maxbit.opencv.samples.DetectFaceDemo.run(SampleB.java:29)
    at org.maxbit.opencv.samples.SampleB.main(SampleB.java:51)

任何机构都可以告诉我该错误意味着什么或如何调试它吗?


答案 1

我也遇到了这个问题。问题在于 .getPath() 返回格式的绝对路径。

例如:“/C:/Users/projects/FaceDetection/bin/com/face/detection/haarcascade_frontalface_alt.xml”。

因此,请像这样更改代码。

CascadeClassifier faceDecetor = new CascadeClassifier(FaceDetection.class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1));

答案 2

发生这种情况通常有两个原因。

  1. 级联分类器文件在指定路径中不存在。lbpcascade_frontalface.xml
  2. 级联分类器文件已损坏。

若要在运行时获取错误消息而不是异常,请尝试如下所示的代码示例。如果构造函数无法加载级联分类器 XML,则它是无提示的。开发人员有责任调用该方法并检查分类器是否正确加载CascadeClassifierempty()

CascadeClassifier cascade = new CascadeClassifier( CASCADE_CLASSIFIER_PATH );
if ( cascade.empty() ) {
    //handler error here
}

你得到的异常来自OpenCV原生代码断言。


推荐