2014-10-21 2 views
1

Я хочу удалить некоторые индексы из вектора внутри цикла.
настоящее время у меня следующий код:Удалить элементы из вектора внутри цикла

static void store_faces(Mat image, vector<Rect> faces, string path, string fileName){ 

SkinDetector mySkinDetector; 
int counter = 0; 
for(int i = 0; i < faces.size(); i++){ 
    Mat temp = image(faces.at(i)); 

    double ratio= mySkinDetector.getSkin(temp); 
    cout << "found face skin ratio.. " << ratio << endl; 

    string file_name = path+ fileName + "_"+ NumberToString(counter)+".jpg"; 
    imwrite(file_name, temp); 
    counter+=1; 
    } 
} 

, и я хочу, чтобы удалить эти лица, которые имеют ratio < 0.5. Как можно удалить элементы из vector<Rect> faces?

+2

возможный дубликат [Удаление элементов из вектор] (http://stackoverflow.com/questions/347441/erasing-elements-from-a-vector) – CoryKramer

+0

Что это имеет отношение к opencv? – Adam

+0

+1 adam. Простое решение, переверните вектор назад и удалите элемент с помощью my_vector.erase (my_vector.begin() + i). – biquette

ответ

5

правильно метод должен сделать:

std::vector<Rect> vec = ...; 
auto tail = std::remove_if(vec.begin(), vec.end(), [&](Rect const & rect) -> bool { 
    return mySkinDetector.getSkin(image(rect)) < 0.5; 
}); 

vec.erase(tail, vec.end()); 
2

Вы могли бы сделать что-то вроде этого:

void fct(vector<Rect> faces) 
{ 
    for(vector<Rect>::iterator it=faces.begin(); it!=faces.end(); /*nothing here*/) 
    { 
     if(condition) 
      it = faces.erase(it) 
     else 
      ++it; 
} 
-1

должно быть:

for(int i = 0; i < faces.size(); i++){ 
    Mat temp = image(faces.at(i)); 

    //[...] 

    if(ratio<0.5) 
     faces.erase(faces.begin()+i); 

    //[...] 
} 
+0

Вы собираетесь пропускать элементы, если только вы условно не увеличиваете 'i'. –

 Смежные вопросы

  • Нет связанных вопросов^_^