一、代码说明:
vector 的数据类型是自定义的,需要根据一个以上的条件对 vector 中的数据进行清除。
struct LabelInfo
{
cv::Rect Rectangle;
int Area;
cv::Point2f Centroid;
};
std::vector<LabelInfo> LabelsInfo;
二、代码实现:
根据 Area 的规定期间:[minArea,maxArea),把 vector<labelInfo>LabelsInfo 中期间外的数据清除。
注意:如果 lambda 中的数值不是常数,需要引用外部变量(存储的数值),则要把引用的变量名放到前面的方括号 [ ] 中。多个变量之间用逗号分隔。
LabelsInfo.erase(remove_if(LabelsInfo.begin(), LabelsInfo.end(),
[minArea, maxArea](LabelInfo n){ return n.Area < minArea || n.Area >= maxArea ; }),
LabelsInfo.end());
lambda 表达式技术真的很酷。
本文介绍了一种使用C++ STL算法remove_if结合lambda表达式来清除vector容器中LabelInfo元素的方法,这些元素的面积属性超出了指定的最小和最大值范围。此方法有效地实现了对图像处理或计算机视觉应用中目标检测结果的过滤。

303

被折叠的 条评论
为什么被折叠?



