我有vector<vector<Point> >
X但我需要将其传递给输入cvConvexityDefects
的函数CvArr*
。
我已经阅读了主题Convexity defects C++ OpenCv。它接受输入这些变量:
vector<Point>& contour, vector<int>& hull, vector<Point>& convexDefects
我无法使解决方案正常工作,因为我有一个vector<Point>
的hull参数,而且我不知道如何在vector<int>
中对其进行转换。
所以现在有两个问题! :)
如何将vector<vector<Point> >
转换为vector<int>
?
提前致谢,祝你有个美好的一天!:)
答案 0 :(得分: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;
}