【问题标题】:getting openCv error- Image step is wrong in EigenFaces.Predict() method获取 openCv 错误 - EigenFaces.Predict() 方法中的图像步骤错误
【发布时间】:2014-01-11 10:30:35
【问题描述】:

我在 java cv 人脸识别中的 EigenFaces.predict() 方法中遇到错误。错误是-

OpenCV Error: Image step is wrong (The matrix is not Continuous, 因此它的行数不能改变) in unknown function, file ......\src\opencv\modules\core\src\matrix .cpp,第 802 行

我的代码是-

public static void main(String[] args)  {
    long size=6;
    MatVector imgs=new MatVector(size);
    int[] id={0,0,0,0,0,0};

    FaceRecognizer fr=opencv_contrib.createEigenFaceRecognizer();
    for(int i=0;i<=5;i++)
    {
        String url="C:/Users/vivek/Documents/NetBeansProjects/Recognizer2/src/a"+(i+1)+".jpg";
        IplImage img=opencv_highgui.cvLoadImage(url);
        imgs=imgs.put(i,img);

    }
    fr.train(imgs,id);
    IplImage testImage=opencv_highgui.cvLoadImage("C:/Users/vivek/Documents/NetBeansProjects/Recognizer2/src/a3.jpg");
    CvMat mat= testImage.asCvMat();
    int val=fr.predict(mat);
    System.out.println(val);    

}

【问题讨论】:

  • 所有图片均经过预处理,灰度化,尺寸相同(70*70)。我正在使用 open cv-2.4.7。
  • 当我使用 LBPfaceRecognizer 时,它会给出错误 - OpenCV 错误:未实现功能/特征(使用原始本地二进制模式进行特征提取仅适用于单通道图像(给定 16)请通过图像数据为灰度图像!)。
  • 我的训练和测试图像是灰度和预处理的,但他们的 nChanel 值为 3。我认为这是导致问题的原因。图像是否必须具有 nChanel 值 1?
  • 是的,我将图像转换为 nChannel 值 1,它与 LBPH FaceceRecognizer 工作正常,但与 Eigen FaceRecognizer 和 FisherFace Recognizer 出现上述相同的错误。

标签: java opencv javacv face-recognition


【解决方案1】:

终于解决了我的问题。我的测试和训练图像的大小是 70*70。 我将大小更改为 200*200,现在它运行良好。其背后的原因是 EigenFaceRecognizer 和 FisherFaceRecognizer 不适用于不是 8 或 16 倍数的图像宽度(在我的情况下)。 70 不是 8 的倍数,因此它不起作用,但对于图像宽度 200(8 的倍数),它可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 2012-11-24
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多