2013-12-23 51 views
2

我在Java cv人臉識別中的EigenFaces.predict()方法中出錯。 IS-越來越openCv錯誤 - 圖像步驟在EigenFaces.Predict()方法中是錯誤的

OpenCV Error: Image step is wrong (The matrix is not continuous, thus its number of rows can not be changed) in unknown function, file ......\src\opencv\modules\core\src\matrix.cpp, line 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);  

}

+0

所有圖像都經過預處理,灰度縮放且尺寸相同(70 * 70)。我正在使用公開的cv-2.4.7。 – vivek

+0

當我使用LBPfaceRecognizer時,它會給出錯誤 - OpenCV錯誤:功能/功能未實現(使用原始局部二進制模式進行特徵提取僅適用於單通道圖像(給出16)請將圖像數據作爲灰度圖像傳遞!)。 – vivek

+0

我的訓練和測試圖像是灰色縮放和預處理,但他們的nChanel值是3.我認爲這是造成這個問題。圖像應該有nChanel值1嗎? – vivek

回答

2

最後我得到了我的問題的解決方案。我的測試和訓練圖像的大小是70 * 70。 我將尺寸更改爲200 * 200,現在它工作正常。其背後的原因是EigenFaceRecognizer和FisherFaceRecognizer不能用不是8或16倍數的圖像寬度(在我的情況下)。 70不是8的倍數,所以它不工作,但對於圖像寬度200(8的倍數),它工作正常。