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