0

我正在使用此代码在 Android 上使用 JavaCV 进行图像拼接:

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

但是当我执行它时,应用程序崩溃并且日志显示以下错误:

java.lang.ExceptionInInitializerError at ...

并且错误指向 Stitcher initilization,即我的代码的第一行。如果我尝试这样做Stitcher stitcher;,它不会中断,但我不能做任何其他事情,因为缝合器没有初始化。如果我尝试将其初始化为null它会崩溃并出现相同的错误。

关于这个问题的任何想法?我一直在寻找一段时间,所有人都在使用它,而且它似乎有效。

4

2 回答 2

0

好,我知道了。

问题是库 opencv_stitching.so 只在 armeabi 文件夹中,而我需要在 armeabi-v7a 文件夹中。不是我可以声明缝合器并初始化它。

于 2013-11-18T12:40:58.347 回答
0

异常初始化错误

表示静态初始化程序中发生了意外异常。抛出 ExceptionInInitializerError 以指示在评估静态初始化程序或静态变量的初始化程序期间发生异常。

我会做类似的事情

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

看看到底发生了什么——除非你已经在异常跟踪的Caused by子句中有该信息。

PS 有时在错误的线程上初始化类时会发生错误(例如,在早期版本的 Android 中,AsyncTask 类需要在应用程序的主线程上显式初始化,否则会在工作线程上加载此类)。

于 2013-11-18T10:30:44.753 回答