5

この機能を動作させることができません。基本的には、特徴検出と参照画像とのマッチングを行っています。一致した特徴を入力画像の上にオーバーレイしたいと考えています。これが私のコードです:

public Mat startProcessing(Mat inputImage) {

    Imgproc.cvtColor(inputImage, rgb, Imgproc.COLOR_GRAY2RGB);
    myFeatures.detect(rgb, keypoints);
    descriptorExtractor.compute(inputImage, keypoints, imageDescriptors);
    descriptorMatcher.match(templateDescriptors, imageDescriptors, matches);

    Features2d.drawMatches(rgb, keypoints, templateImage, templateKeypoints, matches, rgb); 

    Imgproc.cvtColor(rgb, outputImage, Imgproc.COLOR_RGB2RGBA);
    return outputImage;
}

特に問題なのは Features2d.drawMatches です。取得した Android エラーによると、一部のディメンションが一致していません。drawMatches正直なところ、ドキュメンテーションがどこにもないため、Android でどのように動作するのかさえわかりません。

私ができるようにしたいのは、inputImage の上に一致を描画することです。仕事を始めましたが、オブジェクトFeature2d.drawKeypointsに変換する方法がわかりません。また、それが MatOfDMatch の仕組みであるかどうかもわかりません-記述子に対応する内部に何らかの結合性がありませんか?MatOfDMatch matchesMatOfKeypoint

Android で OpenCV を使用するのに非常に苦労しています。そこにある C++ のドキュメントは優れていますが、Android の資料についてはほとんど問題がありません。助けてくれてありがとう!

4

1 に答える 1

6

最初に気付いたのは、画像をある色空間から別の色空間に変換していることです。少し混乱しています。グレースケール イメージで一致を描画する場合は、このイメージ変換を実行する必要はありません。その他、RGB画像のキーポイントを検出し、元の画像から記述子を抽出しています(グレースケールであることがわかります)

また、画像が同じタイプであるかどうか、関数の内部を確認することをお勧めします。ログinputImageオブジェクトに出力して、両方がタイプCV_8UC3または同等であるかどうかを確認してください。基本的に、コードは次のようになります。

Mat imageOut = inputImage.clone();
Features2d.drawMatches(inputImage, keypoints, templateImage, templateKeypoints, matches, imageOut);
Highgui.imwrite("result_match.jpeg", imageOut); 

別の質問に答える:

MatOfDMatchQ:マッチをMatOfKeypointオブジェクトに変換する方法がわかりません。A:入力画像とテンプレート画像をdrawMatches受け取るため、特に行う必要はありません。MatOfKeypoint次に、渡すMatOfDMatchと、一致した受信した kypoints 間の一致が描画されます。

Q: また、それがどのように機能するかどうかもわかりMatOfDMatchません。ディスクリプタに対応する結合性が内部にあるのではないですか? A:はい。そうすればmatches.toList(0).queryIdx、最初に一致した のキーポイントと一致する のキーポイントのmatches.toList(0).trainIdxインデックスを取得できます。inputImagetemplateImage

于 2013-04-25T22:15:27.080 に答える