1

したがって、私の場合、computeQuantisedFeatures メソッドに 2 つの引数を提供する必要があります。2 番目の引数は型です

        List<LocalFeature<Location, ? extends ArrayFeatureVector<byte[]>>>

タイプのimagekeypointsリストを渡そうとします

    LocalFeatureList<Keypoint>

そしてまた

    List<LocalFeature<KeypointLocation, ByteFV>> features = null;
    for (java.util.Iterator<Keypoint> iter = imageKeypoints.iterator(); iter.hasNext();)
    {features.add((LocalFeature<KeypointLocation, ByteFV>)iter.next());}

しかし、私はいつも有名なエラーを受け取ります

    The method computeQuantisedFeatures(HardAssigner<T,?,?>, List<LocalFeature<L,? 
    extends ArrayFeatureVector<T>>>) in the type BagOfVisualWords is not applicable for
    the arguments (HardAssigner<byte[],capture#3-of ?,capture#4-of ?>, 
    List<LocalFeature<KeypointLocation,ByteFV>>)
4

2 に答える 2

1

Paul Belloraが指摘したように、これは実際にはそのメソッドのジェネリックのバグです。1.1.1-SNAPSHOT間もなくバージョンで利用できるようになる修正をコミットしました。computeQuantisedFeatures一時的な解決策は、次のようにクラスに正しいバージョンのメソッドを実装することです。

public static <L extends Location, T> List<QuantisedLocalFeature<L>> computeQuantisedFeatures(
    HardAssigner<T, ?, ?> assigner,
    List<? extends LocalFeature<L, ? extends ArrayFeatureVector<T>>> features)
{
    final List<QuantisedLocalFeature<L>> out = new ArrayList<QuantisedLocalFeature<L>>(features.size());

    for (final LocalFeature<L, ? extends ArrayFeatureVector<T>> f : features) {
        final int idx = assigner.assign(f.getFeatureVector().values);
        out.add(new QuantisedLocalFeature<L>(f.getLocation(), idx));
    }

    return out;
}
于 2013-03-12T12:44:46.170 に答える
1

注: この回答は、こちらKeypointのソースに基づいています。

この問題は、ジェネリックが共変ではないという事実から発生します。メソッドは を期待してList<LocalFeature<L, ? extends ArrayFeatureVector<T>>>いますが、 を提供していますList<Keypoint>。メソッドがList<? extends LocalFeature<L, ? extends ArrayFeatureVector<T>>>代わりに a を取った場合、それは正当な呼び出しになります。

imagekeypoints最も簡単な解決策は、の内容を新しく作成されたにコピーし、List<LocalFeature<KeypointLocation, ByteFV>>代わりにそれを呼び出しに渡すことです。

于 2013-03-11T16:38:25.657 に答える