4

これが私のコードのスナップショットです、

Matrix<byte> mask;
int k = 2;
VectorOfKeyPoint modelKeyPoints;
VectorOfKeyPoint observedKeyPoints;
SURFDetector surfCPU = new SURFDetector(500, false);
modelKeyPoints = surfCPU.DetectKeyPointsRaw(modelImage, null);
Matrix<float> modelDescriptors = surfCPU.ComputeDescriptorsRaw(modelImage, null, modelKeyPoints);
observedKeyPoints = surfCPU.DetectKeyPointsRaw(observedImage, null);
Matrix<float> observedDescriptors = surfCPU.ComputeDescriptorsRaw(observedImage, null, observedKeyPoints);
BruteForceMatcher<float> matcher = new BruteForceMatcher<float>(DistanceType.L2);
matcher.Add(modelDescriptors);
indices = new Matrix<int>(observedDescriptors.Rows, k);
using (Matrix<float> dist = new Matrix<float>(observedDescriptors.Rows, k))
{
      matcher.KnnMatch(observedDescriptors, indices, dist, k, null);
}

KnnMatch()で常に次の例外が発生します

Emgu.CV.Util.CvExceptionが発生しましたメッセージ:OpenCV:queryDescriptors.type()== trainDescCollection [0] .type()

私はこの例外を取り除くために一生懸命努力しましたが、希望はありません:(

4

2 に答える 2

2

私はついにこの問題の原因を見つけました

modelKeyPointsまたはobservedKeyPointsnullのいずれかでした:)

于 2012-12-05T12:47:21.313 に答える
1

Zaherの答えと非常によく似ています-私のmodelKeyPointsはnullではありませんでしたが、空でした(modelKeyPoints.Size == 0)。

別のモデル画像を使用すると役に立ちました。

于 2014-01-08T18:29:51.173 に答える