detectMultiScale中的OpenCV断言错误

好东西

我正在尝试测试OpenCV中的面部识别API。我已经导入了.jar提供的文件,它可以正确加载DLL。imageLibIit()函数将加载DLL。我还在目录中提供了提供的XML文件:
src \ main \ resources \ opencv

在此处输入图片说明

public boolean faceDetect(String inputFilename, String outputFilename){
    if(!loaded){
        if(!imageLibInit()){ // initializes and loads the dynamic libraries
            return false;
        }
    }
    //TODO @Austin fix image resource issues
    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    String xmlResource = loader.getResource("opencv/haarcascade_frontalface_alt.xml").getPath();
    CascadeClassifier faceDetector = new CascadeClassifier(xmlResource);
    Mat inputImage = Imgcodecs.imread(inputFilename);
    ErrorUtils.println(xmlResource);
    if(inputImage.empty()){
        ErrorUtils.println("image is empty");
        return false;
    }
    MatOfRect facesDetected = new MatOfRect();
    faceDetector.detectMultiScale(inputImage, facesDetected);
    Rect[] detections = facesDetected.toArray();
    ErrorUtils.println("Faces detected in '" + inputFilename + "': " + detections.length);
    for(Rect detection : detections){
        Imgproc.rectangle(
                inputImage,
                new Point(detection.x, detection.y),
                new Point(detection.x + detection.width, detection.y + detection.height),
                new Scalar(0, 0, 255)
        );
    }
    Imgcodecs.imwrite(outputFilename, inputImage);
    return true;
}

我仍然遇到错误:

OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale, file C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\objdetect\src\cascadedetect.cpp, line 1639

我研究了此错误,每次解决方案似乎都与资源有关。这很可能是一个非常简单的问题,但到目前为止,我仍然受困。

丹·马塞克(Dan Masek)

查看OpenCV源代码,我们可以找到以下内容:

  • 在内部,CascadeClassifier实现使用类FileStorage来加载数据。[ 1 ]

  • 类在FileStorage内部使用该函数fopen(...)打开数据文件。[ 2 ] [ 3 ]


由于resouce loader("/D:/Programming/workspaces/github/project1/HomeServer/target/classes/opencv/ha‌​arcascade_frontalface_alt.xml"返回的路径有点奇怪,包含前导斜杠,因此第一个怀疑会导致打开文件时出现问题。

我编写了一个简单的小测试以使用Visual C ++进行检查:

#include <cstdio>
#include <iostream>

bool try_open(char const* filename)
{
    FILE* f;

    f = fopen(filename, "rb");
    if (f) {
        fclose(f);
        return true;
    }
    return false;
}

int main()
{
    char const* path_1("/e:/foo.txt");
    char const* path_2("e:/foo.txt");

    std::cout << "fopen(\"" << path_1 << "\") -> " << try_open(path_1) << "\n";
    std::cout << "fopen(\"" << path_2 << "\") -> " << try_open(path_2) << "\n";

    return 0;
}

输出:

fopen("/e:/foo.txt") -> 0
fopen("e:/foo.txt") -> 1

因此,路径是罪魁祸首。根据此答案,一种与平台无关的方法是如下修改代码以生成有效路径:

// ...
ClassLoader loader = Thread.currentThread().getContextClassLoader();
String xmlResource = loader.getResource("opencv/haarcascade_frontalface_alt.xml").getPath();
File file = new File(xmlResource);
xmlResource = file.getAbsolutePath());
// ...
CascadeClassifier faceDetector = new CascadeClassifier(xmlResource);
if(faceDetector.empty()){
    ErrorUtils.println("cascade classifier is empty");
    return false;
}
// ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OpenCV.norm中的断言错误

来自分类Dev

OpenCV复制断言错误

来自分类Dev

Opencv错误:断言失败

来自分类Dev

opencv detectMultiScale

来自分类Dev

iOS和OpenCV错误:断言在PhaseCorrelateRes中失败

来自分类Dev

在Android中与OpenCV模板匹配期间断言失败错误

来自分类Dev

keras中的断言错误

来自分类Dev

无法在OpenCV的hog.detectMultiScale(python)中调整分组设置

来自分类Dev

cv :: erode导致错误:OpenCV错误:断言失败(m.dims> = 2)在Mat中

来自分类Dev

OpenCV错误:断言互相关失败

来自分类Dev

OpenCV断言失败错误:(-215)scn == 3 || scn == 4在函数cv :: cvtColor中工作ALTERNATE次

来自分类Dev

OpenCV断言失败错误:(-215)scn == 3 || scn == 4在函数cv :: cvtColor中工作ALTERNATE次

来自分类Dev

OpenCV 错误:matrix.cpp 第 522 行中的断言失败,/matrix.cpp:522:错误:(-215)

来自分类Dev

OpenCV错误:cvInRangeS中的断言失败(src1.size == dst.size && dst.type()== CV_8U)

来自分类Dev

OpenCV 错误:断言失败 ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) 在 cvtColor 中

来自分类Dev

OpenCV生猪检测器-调试断言错误

来自分类Dev

OpenCV错误:断言失败。该怎么办?

来自分类Dev

OpenCV错误:断言失败。该怎么办?

来自分类Dev

openCV错误:断言失败(scn == 3 || scn == 4)

来自分类Dev

OpenCV图像降噪给出:错误:-215:断言失败

来自分类Dev

OpenCV错误断言在某些Pixal值上失败

来自分类Dev

OpenCV错误:断言失败。该怎么办?

来自分类Dev

openCV错误:断言失败(scn == 3 || scn == 4)

来自分类Dev

实施SIFT算法时出现断言错误:opencv

来自分类Dev

OpenCV生猪检测器-调试断言错误

来自分类Dev

如何断言nodeunit中的错误消息?

来自分类Dev

在gtk中获取断言失败错误。

来自分类Dev

TableView CoreData错误:Swift中的断言失败

来自分类Dev

在gtk中获取断言失败错误。

Related 相关文章

  1. 1

    OpenCV.norm中的断言错误

  2. 2

    OpenCV复制断言错误

  3. 3

    Opencv错误:断言失败

  4. 4

    opencv detectMultiScale

  5. 5

    iOS和OpenCV错误:断言在PhaseCorrelateRes中失败

  6. 6

    在Android中与OpenCV模板匹配期间断言失败错误

  7. 7

    keras中的断言错误

  8. 8

    无法在OpenCV的hog.detectMultiScale(python)中调整分组设置

  9. 9

    cv :: erode导致错误:OpenCV错误:断言失败(m.dims> = 2)在Mat中

  10. 10

    OpenCV错误:断言互相关失败

  11. 11

    OpenCV断言失败错误:(-215)scn == 3 || scn == 4在函数cv :: cvtColor中工作ALTERNATE次

  12. 12

    OpenCV断言失败错误:(-215)scn == 3 || scn == 4在函数cv :: cvtColor中工作ALTERNATE次

  13. 13

    OpenCV 错误:matrix.cpp 第 522 行中的断言失败,/matrix.cpp:522:错误:(-215)

  14. 14

    OpenCV错误:cvInRangeS中的断言失败(src1.size == dst.size && dst.type()== CV_8U)

  15. 15

    OpenCV 错误:断言失败 ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) 在 cvtColor 中

  16. 16

    OpenCV生猪检测器-调试断言错误

  17. 17

    OpenCV错误:断言失败。该怎么办?

  18. 18

    OpenCV错误:断言失败。该怎么办?

  19. 19

    openCV错误:断言失败(scn == 3 || scn == 4)

  20. 20

    OpenCV图像降噪给出:错误:-215:断言失败

  21. 21

    OpenCV错误断言在某些Pixal值上失败

  22. 22

    OpenCV错误:断言失败。该怎么办?

  23. 23

    openCV错误:断言失败(scn == 3 || scn == 4)

  24. 24

    实施SIFT算法时出现断言错误:opencv

  25. 25

    OpenCV生猪检测器-调试断言错误

  26. 26

    如何断言nodeunit中的错误消息?

  27. 27

    在gtk中获取断言失败错误。

  28. 28

    TableView CoreData错误:Swift中的断言失败

  29. 29

    在gtk中获取断言失败错误。

热门标签

归档