我正在尝试在 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/