opencv - 如何将 remove_if 与 vector<point2f> 一起使用

标签 opencv

我有一个向量,其中有很多我想删除的 x,y 位置的 NaN(做一些 opencv 工作)。我不知道如何使用 remove_if 删除 NaN(与删除一起使用时)。如果向量是浮点数或整数但不是point2f,我已经看到了很多例子。任何简单的例子都会很有帮助。谢谢。

最佳答案

您可以使用 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]

关于opencv - 如何将 remove_if 与 vector<point2f> 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35643588/

相关文章:

c++ - 如何将 cv::Mat 转换为浮点指针?

python - 跟踪视频中对象的最佳方法是什么?

python - TypeError:期望一个单段缓冲区对象

opencv - 无法在 Opencv 4.1.2 和 MacOS Catalina 下运行摄像头

visual-studio-2010 - 如何找到单 channel 图像来运行 openCV 的方法 cvCanny

Android Opencv静态初始化

c++ - 在 NodeJS 中异步调用 C++ DLL

c++ - 无法使用 CMake 编译简单的 Opencv C++ 文件

c++ - 在硬盘中存储一个 CvSVM 对象

android - native Activity OpenCV4Android 不工作