如何在vector <point2f>中使用remove_if

时间:2016-02-26 04:37:12

标签: opencv

我有一个向量,其中包含许多用于x,y位置的NaN,我想删除(做一些opencv工作)。我无法弄清楚如何使用remove_if来删除NaN(当与erase一起使用时)。如果向量是float或int而不是point2f,我已经看过很多例子。任何简单的例子都会非常有用。感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用lambda函数,函子或函数指针。这是一个lambda函数的例子:

#include <opencv2/opencv.hpp>
#include <algorithm>
#include <iostream>
#include <cmath>

using namespace cv;
using namespace std;

int main(int argc, char ** argv)
{
    vector<Point2f> pts{ Point2f(1.f, 2.f), Point2f(3.f, sqrt(-1.0f)), Point2f(2.f, 3.f) };

    cout << "Before" << endl;
    for (const auto& p : pts) {
        cout << p << " ";
    }
    cout << endl;

    pts.erase(remove_if(pts.begin(), pts.end(), [](const Point2f& p)
    {
        // Check if a coordinate is NaN
        return isnan(p.x) || isnan(p.y);
    }), pts.end());

    cout << "After" << endl;
    for (const auto& p : pts) {
        cout << p << " ";
    }
    cout << endl;

    return 0;
}

那将打印:

Before
[1, 2] [3, -1.#IND] [2, 3]
After
[1, 2] [2, 3]