java - Java 和 opencv 3.0 中的 OpenCV 错误 : Assertion failed (! empty()) 是什么意思?

标签 java opencv image-processing

我正在尝试在 java 中运行一段代码,当我运行这段代码时,它会抛出以下错误:

OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale, file C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\objdetect\src\cascadedetect.cpp, line 1634
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\objdetect\src\cascadedetect.cpp:1634: 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:103)
    at FaceDetector.main(FaceDetector.java:30)

我的源代码如下:

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class FaceDetector {

    public static void main(String[] args) {

        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        System.out.println("\nRunning FaceDetector");

       CascadeClassifier faceDetector = new CascadeClassifier(FaceDetector.class.getResource("haarcascade_frontalface_alt.xml").getPath());
        //CascadeClassifier cascade1 = new CascadeClassifier("C:/OpenCV/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml");
        //CascadeClassifier cascade1 = new CascadeClassifier("C:/OpenCV/opencv/sources/data/lbpcascade/lbpcascade_frontalface.xml");
        //CascadeClassifier cascade1=new CascadeClassifier();
        //cascade1.load("C:/opencv2.4.9/sources/data/haarcascades/haarcascade_frontalface_alt.xml");
       faceDetector.load("C:/opencv2.4.9/sources/data/haarcascades/haarcascade_frontalface_alt.xml");
        System.out.println("step1");
        Mat image = Imgcodecs.imread(FaceDetector.class.getResource("anuj.jpg").getPath());
        System.out.println("step2");
        MatOfRect faceDetections = new MatOfRect();
        System.out.println("step3");
        faceDetector.detectMultiScale(image, faceDetections);
        System.out.println("step4");
        try {
            System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.err.println("ERROR IS HERE");
            //e.printStackTrace();
        }

        for (Rect rect : faceDetections.toArray()) {
            Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
                    new Scalar(0, 255, 0));
        }

        String filename = "ouput.png";
        System.out.println(String.format("Writing %s", filename));
        Imgcodecs.imwrite(filename, image);
    }
}

请告诉我我的错误是什么。我无法解决这个问题。我还尝试了很多代码变体,但都不起作用。

最佳答案

似乎没有从文件中正确加载分类器。

请确保 faceDetector.load() 返回 true,否则不会读取文件。

关于java - Java 和 opencv 3.0 中的 OpenCV 错误 : Assertion failed (! empty()) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31650201/

相关文章:

java - Oracle Weblogic 10.3.6 上的 Dozer 5.3.2

java - JsonSimple : How to get Second object in Json feed

java - 功率图算法

Python OpenCV - VideoCapture.release() 在 Linux 中不起作用

Android 相机像素操作

opencv - 如何从 OCR 图像中过滤纹理

java - 类型安全哈希表

c++ - 64位Windows 8机器上用Visual Studio 2012构建opencv的绝对解决方案

opencv - 与相机 z 轴正交的线的相机投影

ios - 如何在 iOS 中裁剪进入圆圈内的图像