Сшивание изображений: NullPointerException

Я запустил этот код. Похоже, что result.png не генерируется в результате:

public class ImageStitching {

    public static void main(String[] args){
        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);
        }

       result = cvLoadImage("result.png");

       final CanvasFrame canvas = new CanvasFrame("My Image", 1);

       // Request closing of the application when the image window is closed.
       canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);

       // Show image on window.
       canvas.showImage(result);

      }
}

и ошибка

Exception in thread "main" java.lang.NullPointerException
at com.googlecode.javacv.CanvasFrame.showImage(CanvasFrame.java:366)
    at com.googlecode.javacv.CanvasFrame.showImage(CanvasFrame.java:363)
    at ImageStitching.main(ImageStitching.java:50)

java:50 is canvas.showImage(result);

person user2294002    schedule 18.05.2013    source источник
comment
где вы создаете свой экземпляр сшивателя?   -  person foundry    schedule 18.05.2013
comment
извините, я пропустил его здесь Я включил его в качестве первой строки основного метода. Извините, я пропустил его здесь. Если экземпляр был там, он дает ту же ошибку.   -  person user2294002    schedule 19.05.2013


Ответы (1)


По-видимому, result имеет значение null, когда вы вызываете showImage.

Проблема в вашем коде заключается в том, что вы проверяете, в порядке ли статус (if ( status == stitcher.OK )), а затем все равно пытаетесь загрузить файл. Ваш код должен быть примерно таким:

if ( status != stitcher.OK )
{
    std::cout << "ERROR" << std::endl;
    return 1;
}

Тогда вы, вероятно, увидите, что проблема связана с прошиванием.


Более того, вам не нужно записывать result в файл, прежде чем показывать его.

person JonasVautherin    schedule 19.05.2013
comment
Вы вообще уверены, что файлы sample1.png и sample2.png успешно открыты? - person JonasVautherin; 23.05.2013
comment
Откуда ты это знаешь? Вы применяли canvas.showImage к ним? - person JonasVautherin; 23.05.2013
comment
Кстати, вы ведете себя некорректно со своими вопросами. Когда есть действительный ответ на ваш вопрос, вы должны подтвердить его. Вы не можете использовать вопрос в качестве онлайн-помощи для ваших проблем компиляции. - person JonasVautherin; 23.05.2013
comment
да. просто проверьте их с помощью этого кода result = cvLoadImage(sample1.png); окончательный холст CanvasFrame = новый CanvasFrame (Мое изображение, 1); canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); холст.showImage(результат); - person user2294002; 23.05.2013
comment
Тогда вам следует разобраться в статусе прошивальщика, а это уже другой вопрос. Если это не status.OK, то это что-то другое, что даст вам подсказки. - person JonasVautherin; 23.05.2013