【发布时间】:2014-10-21 14:57:19
【问题描述】:
我想从循环内的向量中删除一些索引。
我目前有以下代码:
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 中删除项目?
【问题讨论】:
-
这和opencv有什么关系?
-
+1 亚当。简单的解决方案,向后循环向量并使用 my_vector.erase(my_vector.begin()+i) 删除元素。
-
您通过值传递
faces,这意味着您在函数中对其所做的任何更改都是在临时向量上完成的。如果您希望传入的faces向量在返回时发生更改,则不会更改。如果期望的行为是改变faces,则通过引用而不是值传递向量。 -
为了跟进 PaulMcKenzie 所写的内容,您应该避免按值传递 std:: 容器,因为这非常昂贵。通过引用传递,如果您不想更改容器,请通过
const引用传递。