Исключение нулевого указателя в детекторе функций SIFT на OpenCV для Android

*извините, если мой английский плохой -.-"

Привет,

Я студент и имею небольшой опыт работы как с OpenCV, так и с Java. Я пытаюсь сделать программу, которая может сшивать два изображения в одно панорамное изображение, используя SIFT и RANSAC. Я также скачал версию OpenCV Library 2.4.6.

Но когда я запускаю свою программу, я получаю исключение нулевого указателя в:

    sift1.detect(imgA, keypoint1);

Вот часть моей программы:

    fileA = getIntent().getStringExtra("fileA");
    fileB = getIntent().getStringExtra("fileB");

    imgA = Highgui.imread(fileA);
    Log.i("IMREAD", fileA+" berhasil");
    imgB = Highgui.imread(fileB);
    Log.i("IMREAD", fileB+" berhasil");

    FeatureDetector sift1 = FeatureDetector.create(3);
    sift1.detect(imgA, keypoint1);
    Log.d("keypoint", "jumlah keypoint 1 = " + keypoint1.size());

    FeatureDetector sift2 = FeatureDetector.create(3);
    sift2.detect(imgB, keypoint2);
    Log.d("keypoint", "jumlah keypoint 2 = " + keypoint2.size());

Спасибо :)


person Aisyah Darojati    schedule 09.10.2013    source источник
comment
Ваш вопрос аналогичен stackoverflow.com/questions/19716292/   -  person old-ufo    schedule 06.11.2013


Ответы (2)


Попробуй это:

MatOfDMatch  matches = new MatOfDMatch();
sift1.detect(imgA, keypoint1,matches );
person user2084339    schedule 25.12.2013

Проблема в линии

FeatureDetector sift1 = FeatureDetector.create(3);

должен быть

FeatureDetector siftDetector = FeatureDetector.create(FeatureDetector.SIFT);

также SIFT принимает изображение как изображение в градациях серого

Вот примерный пример

public class sample 
{
public static void main(String[] args) 
{

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Mat image01 = Highgui.imread("C:/temp/313.jpg"); 

Mat grayImage01 = new Mat(image01.rows(), image01.cols(), image01.type());
Imgproc.cvtColor(image01, grayImage01, Imgproc.COLOR_BGRA2GRAY);
Core.normalize(grayImage01, grayImage01, 0, 255, Core.NORM_MINMAX);

FeatureDetector siftDetector = FeatureDetector.create(FeatureDetector.SIFT);
DescriptorExtractor siftExtractor = DescriptorExtractor.create(DescriptorExtractor.SIFT);

MatOfKeyPoint keyPoint01 = new MatOfKeyPoint();
siftDetector.detect(grayImage01, keyPoint01);
person user3249214    schedule 22.06.2014