1

私はこの変数を持っています

std::vector <cv::KeyPoint> X[e];

処理されたファイルの数として e を使用し、同様の「フィルター処理された」ベクトル変数

std::vector <cv::KeyPoint< Y[e];

検出された特徴のコンテナーとしてベクトル X を使用しました

int minHessian = 400;
cv::SurfFeatureDetector deteC( minHessian );

deteC.detect(f[z], X[z]);

どこ

cv::Mat f[e]

は画像のコンテナーで、z は単なるカウンターです。

次に、このシーケンスが開始されます

int kd = 0;
for(int dk = 0; dk < X[z].size(); dk++)
{
    cv::KeyPoint s = X[z].at(dk);
    qDebug() << fT << "KEYPOINT" << dk << "\nCLASS ID: " << s.class_id << "\nRESPONSE: "
            << s.response << "\nOCTAVE: " << s.octave
            << "\nSIZE: " << s.size << "\nANGLE: " << s.angle
            << "\nX: " << s.pt.x << " Y: " << s.pt.y;

    if(s.octave > 2 && s.response > 5000.00)
    {
            s.class_id = e;
            kd++;
            // I plan to COPY s to Y[e].at(kd)
    }
}

s を Y[e].at(kd) にコピーするにはどうすればよいですか? 回答ありがとうございます。=)

4

1 に答える 1

2
// I plan to COPY s to Y[e].at(kd)   

ループが始まる前に、サイズがどのくらいY[e]になるかがわかっている場合は、これをループの前に置くことができます。

Y[e].resize(size_that_Ye_vector_will_be);

そしてこれはループ内にあります:

Y[e].at(kd) = s;

一方、どれだけ大きくY[e]なるかわからない場合はpush_back、ループ内で使用して、ベクターを一度に 1 項目ずつ大きくする必要があります。

Y[e].push_back(s);
于 2011-11-02T13:51:58.723 に答える