Pergunta

Estou usando este código para costura de imagens com JavaCV no Android:

public void ImageStitching() {
    Stitcher stitcher = Stitcher.createDefault(false);
    MatVector images = new MatVector(2);
    images.put(0,cvLoadImage("sample1.png"));
    images.put(1,cvLoadImage("sample2.png"));

    IplImage result = new IplImage(null);
    int status = stitcher.stitch(images,result);

    if( status == Stitcher.OK )
    {
        cvSaveImage("result.png", result);
    }
}

Mas quando executo, o app trava e o log mostra o seguinte erro:

java.lang.ExceptionInInitializerError at ...

e o erro aponta para a inicialização do Stitcher, a primeira linha do meu código.Se eu tentar fazer Stitcher stitcher; não quebra, mas não posso fazer mais nada porque o costurador não foi inicializado.Se eu tentar inicializá-lo para null ele trava com o mesmo erro.

Alguma ideia sobre o problema?Estou pesquisando há algum tempo e todas as pessoas usam isso e parece funcionar.

Foi útil?

Solução 2

OK, entendi.

O problema era que a biblioteca opencv_stitching.so estava apenas na pasta armeabi e eu precisava na armeabi-v7a.Não posso declarar o Stitcher e inicializá-lo.

Outras dicas

ExceptionInInitializerError

Sinaliza que ocorreu uma exceção inesperada em um inicializador estático.Um ExceptionInInitializerError é lançado para indicar que ocorreu uma exceção durante a avaliação de um inicializador estático ou o inicializador de uma variável estática.

eu faria algo do tipo

Stitcher stitcher;
{
    try {
        stitcher = Stitcher.createDefault(false);
    } catch (Throwable t) {
        t.printStackTrace();
        throw t;
    }
}

e veja o que realmente acontece - a menos que você já tenha essa informação no causado por cláusula do rastreamento de exceção.

PS às vezes ocorrem erros quando uma classe é inicializada no thread errado (por exemplo, nas versões anteriores do Android, a classe AsyncTask exigia inicialização explícita no thread principal em um aplicativo que, de outra forma, carregaria essa classe em um thread de trabalho).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top