Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

Estou usando JavaCv para localizar rostos em fotos. Chamo o metodo de localização dentro de um botão, quando executo o seguinte erro é mostrado:

[color=red]Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at Localizar.loc_ros_nari(Localizar.java:260) //(refere se a linha 9 no codigo abaixo)
at Localizar.btn_loc_rostoActionPerformed(Localizar.java:235) //(refere se a linha 20 do código do botão)
[/color]

o código do método para localizar o rosto

 public  void loc_ros_nari(String casc, String imag)
    {
       // Pré-carga do módulo opencv objdetect 
        Loader.load(opencv_objdetect.class);
        
        origImg = cvLoadImage("\""+imag+"\"");       
        
        // converte para escala de cinza
        IplImage Img_cinza = IplImage.create(origImg.width(),origImg.height(), IPL_DEPTH_8U, 1);
        cvCvtColor(origImg, Img_cinza, CV_BGR2GRAY);
        // diminui o tamanho da imagem para a
        // detecção ser mais rápida
        IplImage Img_peq = IplImage.create(Img_cinza.width()/SCALE,Img_cinza.height()/SCALE, IPL_DEPTH_8U, 1);
        cvResize(Img_cinza, Img_peq, CV_INTER_LINEAR);


         // Ajusta a equalização de histograma,
         //ajusta o contraste e o ruido
        IplImage Img_equ = IplImage.create(Img_peq.width(),Img_peq.height(), IPL_DEPTH_8U, 1);
        cvEqualizeHist(Img_peq,  Img_equ);


        // Cria um armazenamento temporario durante a detecção 
        CvMemStorage Arm_temp = CvMemStorage.create();
        // instancia o classificador de detecção de rosto
        CvHaarClassifierCascade cascade = new CvHaarClassifierCascade(cvLoad(casc));
        CvSeq faces = cvHaarDetectObjects( Img_equ, cascade, Arm_temp,1.1, 3, CV_HAAR_DO_CANNY_PRUNING);
        cvClearMemStorage(Arm_temp);




        // desenhar retangulos amarelo
        int total = faces.total();
        for (int i = 0; i < total; i++) {
            CvRect r = new CvRect(cvGetSeqElem(faces, i));
             cvRectangle(origImg, cvPoint( r.x()*SCALE, r.y()*SCALE ),
             cvPoint( (r.x() + r.width())*SCALE,(r.y() + r.height())*SCALE ),CvScalar.YELLOW, 9, CV_AA, 0);
            //Desfazer dimensionamento da imagem para calcular as coordenadas retangulo
         }


        //Salvando Imagem
         if (total > 0) {
              cvSaveImage(OUT_FILE, origImg);
         }

       //Mostrando imagem
       ImageIcon image = new ImageIcon("C:\\test\\2.jpg"); 
       jLabel2.setIcon(new ImageIcon(image.getImage().getScaledInstance(250,254, Image.SCALE_DEFAULT)));      
    
}

e o código do botão

 private void btn_loc_rostoActionPerformed(java.awt.event.ActionEvent evt) {                                              
    
            String novocaminho = "";
            int i;
            for (i = 0; i < imagem.length(); i++)
            {
                String x = imagem.substring(i, i);
                if ("\\".equals(x))
                {
                    novocaminho = novocaminho + "\\\\";
                }
                else
                {
                    novocaminho = novocaminho + x;
                }
            }     
            
           imagem = novocaminho;      
           jLabel2.setText(imagem);
           loc_ros_nari(CASCADE_FILE,imagem);
          
    }          

IplImage Img_cinza = IplImage.create(origImg.width(),origImg.height(), IPL_DEPTH_8U, 1);
origImg está nulo.

drsmachado

como pode estar com o valor nulo se a variável recebe dados em

Luana. uma coisa que aprendi é que nomes de diretórios ou arquivos com espaços sempre dão problemas, principalmente se a biblioteca foi criada em ambiente Unix (que é o caso do OpenCV) , onde não é costume ter arquivos ou diretórios com espaços.

Não estou dizendo que o OpenCV tenha esse problema (provavelmente não tem), mas não abuse da sorte.

Crie um diretório sem espaços, crie o seu arquivo sem espaços também, e não ponha essas aspas em volta do nome como você fez. A propósito, por que é que você pôs aspas no nome do arquivo de imagem?

origImg = cvLoadImage(imag); 

Pensa comigo, nesta linha (que você mesmo apontou) temos?:

IplImage Img_cinza = IplImage.create(origImg.width(),origImg.height(), IPL_DEPTH_8U, 1); 

Objeto img_cinza (que porra de nomenclatura você usa?): Este objeto será instanciado, não pode disparar NPE.
IplImage.create: trata-se de um método estático, como é pertencente a classe, não pode disparar NPE.
origImg: Embora a linha anterior à esta aparentemente defina um valor para o mesmo, este valor é resultado do método

cvLoadImage("\""+imag+"\"");

E, como o mesmo não está ali, este objeto pode ter recebido null como valor. Logo, invocar um método do mesmo, como o width() ou height() poderá disparar NPE.
IPL_DEPTH_8U: Constantes não disparam NPE.
1: Valor fixo não dispara NPE.

Então, onde seria plausível e possível, de acordo com o que você mesmo descreveu, o disparo da exceção?