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);
}