OpenCV java Face检测NullPointerException

时间:2017-04-30 10:24:39

标签: java opencv

我正在学习Mac中的OpenCV java。我正在网上试用这个教程,但在线程“main”java.lang.NullPointerException中获得异常

这是我的代码

import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;


public class testApp {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        CascadeClassifier faceDetector = new CascadeClassifier(testApp.class
                        .getResource("/Users/myName/Downloads/opencv/data/haarcascades/haarcascade_frontalface_alt2.xml")
                        .getPath());

        Mat image = Imgcodecs.imread(testApp.class
                        .getResource("lena.png")
                        .getPath());

        MatOfRect faceD = new MatOfRect();
        faceDetector.detectMultiScale(image,faceD);
        for (Rect rect:faceD.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 outputFile = "OUTPUT.png";
        //System.out.println(String.format("writing %s", outputFile));
        Imgcodecs.imwrite(outputFile,image);

    }
}

错误

Exception in thread "main" java.lang.NullPointerException
    at testApp.main(testApp.java:13)

如何解决这个问题,提前谢谢

3 个答案:

答案 0 :(得分:2)

似乎.getResource("/Users/myName/Downloads/opencv/data/haarcascades/haarcascade_frontalface_alt2.xml")返回null,因为它无法找到资源。因此,我建议您检查上面的路径是否正确。

答案 1 :(得分:0)

你导入了MatOfReact吗?: import org.opencv.core.MatOfRect;

答案 2 :(得分:0)

我认为它不会加载xml文件,因此CascadeClassifier的默认opencv构造函数就是这样

CascadeClassifier::Cascade`Classifier(const string& filename) 

示例:

CascadeClassifier face_cascade;
    face_cascade.load( "C:/OpenCV243/data/Haarcascades/haarcascade_frontalface_alt2.xml" );