Исключение нулевого указателя в SIFT Feature Detector в OpenCV для Android
* извините, если мой английский плохой -.-"
Привет,
Я студент и имею небольшой опыт работы с OpenCV или Java. Я пытаюсь сделать программу, которая может сшивать два изображения в одну панораму, используя SIFT и RANSAC. Я также скачал версию OpenCV Library 2.4.6.
Но когда я запускаю свою программу, я получаю исключение Null Pointer в:
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());
Спасибо:)
2 ответа
Попробуй это:
MatOfDMatch matches = new MatOfDMatch();
sift1.detect(imgA, keypoint1,matches );
Проблема в линии
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);