1

我有一个vector<vector<Point> >X 但我需要将它传递给cvConvexityDefects接受输入 a的函数CvArr*

我已经阅读了Convexity 缺陷 C++ OpenCv主题。它接受输入这些变量:

vector<Point>& contour, vector<int>& hull, vector<Point>& convexDefects

我无法使解决方案正常工作,因为我有一个船体参数 avector<Point>并且我不知道如何将其转换为 a vector<int>

所以现在有两个问题!:)

如何将 a 转换vector<vector<Point> >为 a vector<int>

提前谢谢,祝你有美好的一天!:)

4

1 回答 1

0

使用std::for_each和累积对象:

class AccumulatePoints
{
public:
    AccumulatePoints(std::vector<int>& accumulated)
    : m_accumulated(accumulated)
    {
    }

    void operator()(const std::vector<Point>& points)
    {
        std::for_each(points.begin(), points.end(), *this);
    }

    void operator()(const Point& point)
    {
        m_accumulated.push_back(point.x);
        m_accumulated.push_back(point.y);
    }
private:
    std::vector<int>& m_accumulated;
};

像这样使用:

int main()
{
    std::vector<int> accumulated;
    std::vector<std::vector<Point>> hull;

    std::for_each(hull.begin(), hull.end(), AccumulatePoints(accumulated));

    return 0;
}
于 2012-04-05T11:56:55.007 回答