[英]Error trying to detect faces in an image with OpenCV JAVA
我使用了本教程中的代码: http : //opencvlover.blogspot.co.uk/2012/11/face-detection-in-javacv-using-haar.html
对其进行了稍微修改,以读取其他图像,并在尝试面部检测之前显示此图像(第14行)。 通过此操作,我可以确认图像已正确加载。
该错误稍后在第23行发生。 这是完整的错误代码:
OpenCV Error: Null pointer (Invalid classifier cascade) in cvHaarDetectObjectsForROC,file ..\..\..\..\opencv\modules\objdetect\src\haar.cpp, line 1514
Exception in thread "main" java.lang.RuntimeException: ..\..\..\..\opencv\modules\objdetect\src\haar.cpp:1514: error: (-27) Invalid classifier cascade in function cvHaarDetectObjectsForROC
at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(Native Method)
at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(opencv_objdetect.java:238)
at FaceDetection.detect(FaceDetection.java:23)
at FaceDetection.main(FaceDetection.java:15)
这是我完整的程序:
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
import static com.googlecode.javacv.cpp.opencv_objdetect.*;
public class FaceDetection{
public static final String XML_FILE =
"resources/haarcascade_frontalface_default.xml";
public static void main(String[] args){
IplImage img = cvLoadImage("pic.jpg");
cvShowImage("",img);cvWaitKey(0);
detect(img);
}
public static void detect(IplImage src){
CvHaarClassifierCascade cascade = new
CvHaarClassifierCascade(cvLoad(XML_FILE));
CvMemStorage storage = CvMemStorage.create();
CvSeq sign = cvHaarDetectObjects(
src,
cascade,
storage,
1.5,
3,
CV_HAAR_DO_CANNY_PRUNING);
cvClearMemStorage(storage);
int total_Faces = sign.total();
for(int i = 0; i < total_Faces; i++){
CvRect r = new CvRect(cvGetSeqElem(sign, i));
cvRectangle (
src,
cvPoint(r.x(), r.y()),
cvPoint(r.width() + r.x(), r.height() + r.y()),
CvScalar.RED,
2,
CV_AA,
0);
}
cvShowImage("Result", src);
cvWaitKey(0);
}
}
有人知道导致此错误的原因是什么,或者如何解决该错误? 谢谢!
解决了!
我用Google搜索“ haarcascade_frontalface_default.xml”,将其下载并粘贴到工作区的文件夹中,从XML字符串中的文件名中删除/ resources /,并且可以正常工作。
恭喜解决。 但是,要进步和学习,您必须了解出了什么问题。
发生错误是因为程序找不到级联分类器。 我以为您错误地声明了分类器的位置,但事实证明您根本没有分类器。 您可以通过下载示例分类器并使用它来解决此问题。
您不必将分类器放在包含程序的文件夹中。 您也可以将其放在其他位置,并说明分类器所在的路径。
如果您真的很喜欢物体检测,我还建议您训练自己的haar分类器。 这将帮助您更好地了解级联分类器的工作方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.