首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javacv人脸识别

Javacv人脸识别
EN

Stack Overflow用户
提问于 2014-03-23 20:19:31
回答 1查看 3.9K关注 0票数 1

我试图在javacv中使用FaceRecognition。但是当我有超过5张火车图像时,我会得到这样的错误:

Java Environment:EXCEPTION_ACCESS_VIOLATION (0xc00005)在pc=0x6a30b400、pid=4856、tid=32JRE版本: Java(TM) SE运行时环境(7.0_51-b13) (build 1.7.0_51-b13)Java : Java (TM)客户端VM (24.51-b03混合模式,共享windows-x86 )中检测到一个致命错误:C opencv_core246.dll+0x4b400Failed编写内核转储。默认情况下,在保存了更多信息的as:C:\Users\reco\workspace\hellow\hs_err_pid4856.logIf WindowsAn错误报告文件的客户端版本上不启用微型转储--您想要提交一个bug报告,请访问:http://bugreport.sun.com/bugreport/crash.jsp本地code.See问题框架中的Java之外发生的崩溃,以便在何处报告该错误。

这是我的密码:

代码语言:javascript
复制
import com.googlecode.javacv.cpp.opencv_core;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_contrib.*;
import java.io.File;
import java.io.FilenameFilter;

public class OpenCVFaceRecognizer {
public static void main(String[] args) {
    String trainingDir = "C:/Users/reco/workspace/hellow";

    IplImage testImage = cvLoadImage("C:/Users/reco/workspace/0.png");

    File root = new File(trainingDir);

    FilenameFilter pngFilter = new FilenameFilter() {
        public boolean accept(File dir, String name) {
            return name.toLowerCase().endsWith(".png");
        }
    };

    File[] imageFiles = root.listFiles(pngFilter);

     MatVector images = new MatVector(imageFiles.length);

    int[] labels = new int[imageFiles.length];

    int counter = 0;
    int label;

    IplImage img;
    IplImage grayImg;

    for (File image : imageFiles) {
        img = cvLoadImage(image.getAbsolutePath());
        String temp= image.getName();
        label = Integer.parseInt(temp.charAt(0)+"");

        grayImg = IplImage.create(img.width(), img.height(), IPL_DEPTH_8U, 1);

        cvCvtColor(img, grayImg, CV_BGR2GRAY);

        images.put(counter, grayImg);

        labels[counter] = label;

        counter++;
    }

    IplImage greyTestImage = IplImage.create(testImage.width(), testImage.height(), IPL_DEPTH_8U, 1);

    //FaceRecognizer faceRecognizer = createFisherFaceRecognizer();
     FaceRecognizer faceRecognizer = createEigenFaceRecognizer();
    // FaceRecognizer faceRecognizer = createLBPHFaceRecognizer()

    faceRecognizer.train(images, labels);

    cvCvtColor(testImage, greyTestImage, CV_BGR2GRAY);

    int predictedLabel = faceRecognizer.predict(greyTestImage);

    System.out.println("Predicted label: " + predictedLabel);
}
}

编辑::我刚删除

代码语言:javascript
复制
    grayImg = IplImage.create(img.width(), img.height(), IPL_DEPTH_8U, 1);

    cvCvtColor(img, grayImg, CV_BGR2GRAY);

它起了作用:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-29 19:07:53

代码语言:javascript
复制
    IplImage img;
    IplImage grayImg=null;

    for (File image : imageFiles) {
        img = cvLoadImage(image.getAbsolutePath(),CV_BGR2GRAY);
        int yer = image.getName().indexOf(".");
        String isim=image.getName().substring(0,yer);

        label = Integer.parseInt(isim);

        images.put(counter, img);

        labels[counter] = label;

        counter++;
    }

这是我的代码的最终结果,它的工作原理就像一种魅力:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22596540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档