Как скопировать ключевые точки в другой вектор - PullRequest
1 голос
/ 02 ноября 2011

У меня есть эта переменная

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)? Спасибо за отзывы! =) * * 1 018

1 Ответ

2 голосов
/ 02 ноября 2011
// 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 внутри цикла, чтобы вырастить вектор по одному элементу за раз:

Y[e].push_back(s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...