Erro ao detectar objetos usando Javacv e Netbeans

3 respostas
Luanaas

Olá galera estou usando o cvHaarDetectObjects para localizar o nariz de uma pessoa, porem estou recebendo o seguinte erro

[color=red]
OpenCV Error: Null pointer (Invalid classifier cascade) in unknown function, file …\src\opencv\modules\objdetect\src\haar.cpp, line 1495
Exception in thread “main” java.lang.RuntimeException: …\src\opencv\modules\objdetect\src\haar.cpp:1495: error: (-27) Invalid classifier cascade

at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(Native Method)

at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(opencv_objdetect.java:244)

at opencv123.Opencv123.main(Opencv123.java:45)

[/color]

segue meu código

package opencv123;

import com.googlecode.javacv.JavaCvErrorCallback;
import com.googlecode.javacv.cpp.opencv_core.CvMemStorage;
import com.googlecode.javacv.cpp.opencv_core.CvRect;
import com.googlecode.javacv.cpp.opencv_core.CvScalar;
import com.googlecode.javacv.cpp.opencv_core.CvSeq;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_BGR2GRAY;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvCvtColor;
import com.googlecode.javacv.cpp.opencv_objdetect.CvHaarClassifierCascade;
import static com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;



public class Opencv123 {

  private static final String CASCADE_FILE = "C:\\opencv\\data\\haarcascades\\haarcascade_mcs_nose.xml";
 
  public static void main(String[] args) throws Exception {
      new JavaCvErrorCallback().hashCode();
           
 
     BufferedImage imagem = ImageIO.read(new File("eu.jpg"));
  
     IplImage image2 = IplImage.createFrom(imagem); 
    
            
    IplImage grayImage2 = cvCreateImage(cvGetSize(image2), 01, 1);
    
    
    cvCvtColor(image2, grayImage2, CV_BGR2GRAY);
 
    CvMemStorage storage = CvMemStorage.create();
 
   
    CvHaarClassifierCascade cascade = new CvHaarClassifierCascade(cvLoadImage(CASCADE_FILE));
 
   
    CvSeq faces = cvHaarDetectObjects(grayImage2, cascade, storage, 1.1, 1, 0);
 
     for (int i = 0; i < faces.total();i++) {
      CvRect r = new CvRect(cvGetSeqElem(faces, i));
      cvRectangle(image2, cvPoint(r.x(), r.y()),
      cvPoint(r.x() + r.width(), r.y() + r.height()), CvScalar.YELLOW, 1, CV_AA, 0);
    }
 
    BufferedImage c =  image2.getBufferedImage();
    
    
    ImageIO.write(c, "jpg", new File("eu2.jpg"));
  }
}

3 Respostas

douglasmanteiga
Luanaas:
Olá galera estou usando o cvHaarDetectObjects para localizar o nariz de uma pessoa, porem estou recebendo o seguinte erro

[color=red]
OpenCV Error: Null pointer (Invalid classifier cascade) in unknown function, file ..\..\..\src\opencv\modules\objdetect\src\haar.cpp, line 1495
Exception in thread "main" java.lang.RuntimeException: ..\..\..\src\opencv\modules\objdetect\src\haar.cpp:1495: error: (-27) Invalid classifier cascade

at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(Native Method)
at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(opencv_objdetect.java:244)
at opencv123.Opencv123.main(Opencv123.java:45)
[/color]

Eii faça essas alterações no seu código, ok...

import com.googlecode.javacv.JavaCvErrorCallback;  
import com.googlecode.javacv.cpp.opencv_core.CvMemStorage;  
import com.googlecode.javacv.cpp.opencv_core.CvRect;  
import com.googlecode.javacv.cpp.opencv_core.CvScalar;  
import com.googlecode.javacv.cpp.opencv_core.CvSeq;  
import com.googlecode.javacv.cpp.opencv_core.IplImage;  
import static com.googlecode.javacv.cpp.opencv_core.*;  
import static com.googlecode.javacv.cpp.opencv_highgui.*;  
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_BGR2GRAY;  
import static com.googlecode.javacv.cpp.opencv_imgproc.cvCvtColor;  
import com.googlecode.javacv.cpp.opencv_objdetect.CvHaarClassifierCascade;  
import static com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects;  
import java.awt.image.BufferedImage;  
import java.io.File;  
import javax.imageio.ImageIO;  

import com.googlecode.javacv.cpp.opencv_core.IplImage;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
import static com.googlecode.javacv.cpp.opencv_objdetect.*;
  
  
  
public class Opencv123 {  
  
  private static final String CASCADE_FILE = "C:\\test\\haarcascade_mcs_nose.xml";  
  
  public static void main(String[] args) throws Exception {  
             
  
     //BufferedImage imagem = ImageIO.read(new File("C:\\test\\1.jpg"));  
    
     //IplImage image2 = IplImage.createFrom(imagem);   
      
    IplImage grayImage2 = cvLoadImage("C:\\test\\1.jpg");  
              
    //IplImage grayImage2 = cvCreateImage(cvGetSize(image2), 01, 1);  
      
      
    //cvCvtColor(image2, grayImage2, CV_BGR2GRAY);  
    CvHaarClassifierCascade cascade = new CvHaarClassifierCascade(cvLoad(CASCADE_FILE));  
    CvMemStorage storage = CvMemStorage.create();  
     
    CvSeq faces = cvHaarDetectObjects(
            grayImage2,
            cascade, 
            storage, 
            1.5, 
            3, 
            CV_HAAR_DO_CANNY_PRUNING);  
  
     for (int i = 0; i < faces.total();i++) {  
      CvRect r = new CvRect(cvGetSeqElem(faces, i));  
      cvRectangle(grayImage2, cvPoint(r.x(), r.y()),  
      cvPoint(r.x() + r.width(), r.y() + r.height()), CvScalar.YELLOW, 1, CV_AA, 0);  
    }  
  cvShowImage("Result", grayImage2);
        cvWaitKey(0);
    //BufferedImage c =  image2.getBufferedImage();  
      
      
    //ImageIO.write(c, "jpg", new File("eu2.jpg"));  
  }  
}
Luanaas

Douglasmanteira obrigado pela ajuda,

fiz as modificações que você falou, mas apareceu um erro na linha do "CV_HAAR_DO_CANNY_PRUNING"
o erro é esse

[color=red]run:
OpenCV Error: Null pointer (Invalid classifier cascade) in unknown function, file …\src\opencv\modules\objdetect\src\haar.cpp, line 1495
Exception in thread “main” java.lang.RuntimeException: …\src\opencv\modules\objdetect\src\haar.cpp:1495: error: (-27) Invalid classifier cascade

at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(Native Method)
    at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(opencv_objdetect.java:244)
    at opencv123.Opencv123.main(Opencv123.java:46)

Java Result: 1[/color]

você saberia me responder o que é ?

douglasmanteiga

Luanaas:
Douglasmanteira obrigado pela ajuda,

fiz as modificações que você falou, mas apareceu um erro na linha do "CV_HAAR_DO_CANNY_PRUNING"
o erro é esse

[color=red]run:
OpenCV Error: Null pointer (Invalid classifier cascade) in unknown function, file …\src\opencv\modules\objdetect\src\haar.cpp, line 1495
Exception in thread “main” java.lang.RuntimeException: …\src\opencv\modules\objdetect\src\haar.cpp:1495: error: (-27) Invalid classifier cascade

at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(Native Method)
    at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(opencv_objdetect.java:244)
    at opencv123.Opencv123.main(Opencv123.java:46)

Java Result: 1[/color]

você saberia me responder o que é ?

Import

Olha me parece que é problema de importação verifique a versão das suas LIB, nesse exemplo utilizei as mais atuais…
Tente também pegar seu arquivo haarcascade_mcs_nose.xml e jogar dentro da pasta principal do projeto ou criar o caminho C:/test/ e joga o arquivo conforme o exemplo.

Criado 13 de fevereiro de 2013
Ultima resposta 19 de abr. de 2013
Respostas 3
Participantes 2