Java 使用opencv进行人脸检测,给出一个异常
我尝试在java中使用opencv进行人脸检测。我的代码是:Java 使用opencv进行人脸检测,给出一个异常,java,image-processing,javacv,Java,Image Processing,Javacv,我尝试在java中使用opencv进行人脸检测。我的代码是: String CASCADE_FILE ="C:/Users/admin/Desktop/javacv/src/javacv/lbpcascade_frontalface.xml"; String OUT_FILE = "markedFaces.jpg"; IplImage origImg = cvLoadImage("C:/Users/admin/Deskto
String CASCADE_FILE ="C:/Users/admin/Desktop/javacv/src/javacv/lbpcascade_frontalface.xml";
String OUT_FILE = "markedFaces.jpg";
IplImage origImg = cvLoadImage("C:/Users/admin/Desktop/javacv/src/javacv/lena.png", 1);
//IplImage origImg = cvLoadImage(args[0]);
// convert to grayscale
IplImage grayImg = IplImage.create(origImg.width(),origImg.height(), IPL_DEPTH_8U, 1);
cvCvtColor(origImg, grayImg, CV_BGR2GRAY);
// scale the grayscale (to speed up face detection)
IplImage smallImg = IplImage.create(grayImg.width()/SCALE,grayImg.height()/SCALE, IPL_DEPTH_8U, 1);
cvResize(grayImg, smallImg, CV_INTER_LINEAR);
// equalize the small grayscale
IplImage equImg = IplImage.create(smallImg.width(),smallImg.height(), IPL_DEPTH_8U, 1);
cvEqualizeHist(smallImg, equImg);
// create temp storage, used during object detection
CvMemStorage storage = CvMemStorage.create();
// instantiate a classifier cascade for face detection
CvHaarClassifierCascade cascade =new CvHaarClassifierCascade(cvLoad(CASCADE_FILE));
System.out.println("Detecting faces...");
CvSeq faces = cvHaarDetectObjects(equImg, cascade, storage,1.1, 3, CV_HAAR_DO_CANNY_PRUNING);
cvClearMemStorage(storage);
// draw thick yellow rectangles around all the faces
int total = faces.total();
System.out.println("Found " + total + " face(s)");
for (int i = 0; i < total; i++) {
CvRect r = new CvRect(cvGetSeqElem(faces, i));
cvRectangle(origImg, cvPoint( r.x()*SCALE, r.y()*SCALE ),cvPoint( (r.x() + r.width())*SCALE,(r.y() + r.height())*SCALE ),CvScalar.RED, 6, CV_AA, 0);
String strRect = String.format("CvRect(%d,%d,%d,%d)", r.x(), r.y(), r.width(), r.height());
System.out.println(strRect);
//undo image scaling when calculating rect coordinates
}
if (total > 0) {
System.out.println("Saving marked-faces version of " + " in " + OUT_FILE);
cvSaveImage(OUT_FILE, origImg);
}
如何克服它,因为我找不到任何解决方法。请帮助尝试此代码
private static final String CASCADE_FILE = "./others/haarcascade_frontalface_alt.xml";
public FaceDetection(String inputFile, String outputFile) throws Exception {
// Load the original image.
IplImage originalImage = cvLoadImage(inputFile, 1);
// We need a grayscale image in order to do the recognition, so we create a new image of the same size as the original one.
IplImage grayImage = IplImage.create(originalImage.width(),originalImage.height(), IPL_DEPTH_8U, 1);
// We convert the original image to grayscale.
cvCvtColor(originalImage, grayImage, CV_BGR2GRAY);
CvMemStorage storage = CvMemStorage.create();
// We instantiate a classifier cascade to be used for detection, using the cascade definition
CvHaarClassifierCascade cascade = new CvHaarClassifierCascade(cvLoad(CASCADE_FILE));
// We detect the faces.
CvSeq faces = cvHaarDetectObjects(grayImage, cascade, storage, 1.1, 1, 0);
// We iterate over the discovered faces and draw yellow rectangles around them.
for (int i = 0; i < faces.total(); i++) {
CvRect r = new CvRect(cvGetSeqElem(faces, i));
cvRectangle(originalImage, cvPoint(r.x(), r.y()), cvPoint(r.x() + r.width(), r.y() + r.height()), CvScalar.RED, 1, CV_AA, 0);
}
// Save the image to a new file.
cvSaveImage(outputFile, originalImage);
}
private static final String CASCADE_FILE=“/others/haarcascade_frontalface_alt.xml”;
公共面检测(字符串输入文件、字符串输出文件)引发异常{
//加载原始图像。
IplImage originalImage=cvLoadImage(输入文件,1);
//我们需要一个灰度图像来进行识别,所以我们创建一个与原始图像大小相同的新图像。
IplImage grayImage=IplImage.create(originalImage.width()、originalImage.height()、IPL_DEPTH_8U,1);
//我们将原始图像转换为灰度。
CVT颜色(原始图像、灰度图像、CV_BGR2GRAY);
CvMemStorage=CvMemStorage.create();
//我们使用级联定义实例化一个用于检测的分类器级联
CvHaarClassifierCascade cascade=新的CvHaarClassifierCascade(cvLoad(cascade_文件));
//我们发现了这些面孔。
CvSeq faces=cvhaardetecobjects(灰度图像、级联、存储、1.1、1、0);
//我们在发现的面上迭代,并在其周围绘制黄色矩形。
对于(int i=0;i
当我尝试制作一个检测人脸的应用程序时,我也遇到了同样的问题。我用过。解析XML模型时出现问题。我用这个模型。然后我工作得很好 @DonChakkappn输入文件和输出文件字符串以及原始图像是什么?您在CASCADE_文件中给出的路径是什么?我正在使用netbeans。请帮助您仅提供输入图像的路径和输出图像的路径作为参数。输出图像将是输入图像的副本,并标记面。添加“haarcascade_frontalface_alt.xml”在项目文件夹中,然后将第一行更新为私有静态最终字符串CASCADE\u FILE=“haarcascade\u frontalface\u alt.xml”;另外,如何使用此代码进行人脸识别?请提供帮助。@user3509463您是否通过使用上述代码获得人脸检测的输出?。如果您想实现人脸识别,请通过此链接
private static final String CASCADE_FILE = "./others/haarcascade_frontalface_alt.xml";
public FaceDetection(String inputFile, String outputFile) throws Exception {
// Load the original image.
IplImage originalImage = cvLoadImage(inputFile, 1);
// We need a grayscale image in order to do the recognition, so we create a new image of the same size as the original one.
IplImage grayImage = IplImage.create(originalImage.width(),originalImage.height(), IPL_DEPTH_8U, 1);
// We convert the original image to grayscale.
cvCvtColor(originalImage, grayImage, CV_BGR2GRAY);
CvMemStorage storage = CvMemStorage.create();
// We instantiate a classifier cascade to be used for detection, using the cascade definition
CvHaarClassifierCascade cascade = new CvHaarClassifierCascade(cvLoad(CASCADE_FILE));
// We detect the faces.
CvSeq faces = cvHaarDetectObjects(grayImage, cascade, storage, 1.1, 1, 0);
// We iterate over the discovered faces and draw yellow rectangles around them.
for (int i = 0; i < faces.total(); i++) {
CvRect r = new CvRect(cvGetSeqElem(faces, i));
cvRectangle(originalImage, cvPoint(r.x(), r.y()), cvPoint(r.x() + r.width(), r.y() + r.height()), CvScalar.RED, 1, CV_AA, 0);
}
// Save the image to a new file.
cvSaveImage(outputFile, originalImage);
}