Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv Javacv人脸识别_Opencv_Javacv_Face Recognition - Fatal编程技术网

Opencv Javacv人脸识别

Opencv Javacv人脸识别,opencv,javacv,face-recognition,Opencv,Javacv,Face Recognition,我正在尝试将人脸识别与javacv结合使用。但当我有5张以上的列车图像时,我会出现以下错误: #Java运行时环境检测到一个致命错误: # #pc=0x6a30b400,pid=4856,tid=32时出现异常访问违规(0xc0000005) # #JRE版本:Java(TM)SE运行时环境(7.0_51-b13)(build 1.7.0_51-b13) #Java虚拟机:Java热点(TM)客户端虚拟机(24.51-b03混合模式,共享windows-x86) #问题帧: #C[opencv_

我正在尝试将人脸识别与javacv结合使用。但当我有5张以上的列车图像时,我会出现以下错误:

#Java运行时环境检测到一个致命错误:
#
#pc=0x6a30b400,pid=4856,tid=32时出现异常访问违规(0xc0000005)
#
#JRE版本:Java(TM)SE运行时环境(7.0_51-b13)(build 1.7.0_51-b13)
#Java虚拟机:Java热点(TM)客户端虚拟机(24.51-b03混合模式,共享windows-x86)
#问题帧:
#C[opencv_core246.dll+0x4b400]
#
#无法写入核心转储。默认情况下,在客户端版本的Windows上不启用小型转储
#
#包含详细信息的错误报告文件另存为:
#C:\Users\reco\workspace\hellow\hs\u err\u pid4856.log
#
#如果您想提交错误报告,请访问:
#
#崩溃发生在本机代码中的Java虚拟机外部。
#有关报告错误的位置,请参见问题框。
#

这是我的代码:

import com.googlecode.javacv.cpp.opencv_core;
导入静态com.googlecode.javacv.cpp.opencv_highgui.*;
导入静态com.googlecode.javacv.cpp.opencv_core.*;
导入静态com.googlecode.javacv.cpp.opencv_imgproc.*;
导入静态com.googlecode.javacv.cpp.opencv_contrib.*;
导入java.io.File;
导入java.io.FilenameFilter;
公共类OpenCVFaceRecognitor{
公共静态void main(字符串[]args){
String trainingDir=“C:/Users/reco/workspace/hellow”;
IplImage testImage=cvLoadImage(“C:/Users/reco/workspace/0.png”);
文件根=新文件(trainingDir);
FilenameFilter pngFilter=新FilenameFilter(){
公共布尔接受(文件目录,字符串名称){
返回name.toLowerCase().endsWith(“.png”);
}
};
File[]imageFiles=root.listFiles(pngFilter);
MatVector images=新的MatVector(imageFiles.length);
int[]labels=新的int[imageFiles.length];
int计数器=0;
int标签;
IplImage-img;
IplImage-grayImg;
用于(文件图像:imageFiles){
img=cvLoadImage(image.getAbsolutePath());
字符串temp=image.getName();
label=Integer.parseInt(临时字符(0)+“”);
灰度img=IplImage.create(img.width(),img.height(),IPL_DEPTH_8U,1);
CVT颜色(img、灰色img、CV_bgr2灰色);
图像。放置(计数器,灰度);
标签[计数器]=标签;
计数器++;
}
IplImage greyTestImage=IplImage.create(testImage.width(),testImage.height(),IPL_DEPTH_8U,1);
//FaceRecognizer FaceRecognizer=createFisherFaceRecognizer();
FaceRecognizer FaceRecognizer=createEigenFaceRecognizer();
//Facesrecognizer Facesrecognizer=CreateLBPHFacesrecognizer()
人脸识别器。序列(图像、标签);
CVT颜色(测试图像、灰色估计、CV_bgr2灰色);
int predictedLabel=faceRecognizer.predict(greyTestImage);
System.out.println(“预测标签:+predictedLabel”);
}
}
编辑::我刚删除

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

    cvCvtColor(img, grayImg, CV_BGR2GRAY);
它成功了:)


这是我的最后一段代码,它的作用就像一个符咒:)

请将您的解决方案发布到答案中,而不是将其编辑到您的问题中。
    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++;
    }