0

*私の英語が下手でしたらごめんなさい -.-"

ご挨拶、

私は学生で、OpenCV と Java の両方の経験がほとんどありません。SIFT と RANSAC を使用して、2 つの画像を 1 つのパノラマ画像にステッチできるプログラムを作成しようとしています。OpenCV Library 2.4.6 バージョンもダウンロードしました。

しかし、プログラムを実行すると、次の場所で Null Pointer Exception が発生しました。

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

ありがとうございました :)

4

2 に答える 2

0

これを試して:

MatOfDMatch  matches = new MatOfDMatch();
sift1.detect(imgA, keypoint1,matches );
于 2013-12-25T10:40:34.597 に答える
0

問題はラインにあります

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);
于 2014-06-22T02:26:37.287 に答える