Как скопировать ключевые точки в другой вектор

#c #qt #vector #opencv #feature-detection

#c #qt #вектор #opencv #обнаружение функций #c

Вопрос:

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

 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 amp;amp; 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:

 // 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);