如何检索轮廓点 - 使用 opencv 转换为矢量?

Posted

技术标签:

【中文标题】如何检索轮廓点 - 使用 opencv 转换为矢量?【英文标题】:How to retrieve the contour points - convert in to vector using opencv ? 【发布时间】:2014-05-05 13:30:45 【问题描述】:

如何检索轮廓点 - opencv ?

我的图像有三个对象(不规则形状) 我已经找到了以上三个物体的轮廓。

**我的声明 - 轮廓**

vector<vector<Point>> contours;

所以我得到了如下的对象坐标

contours.[size] = 3
         [capacity ] = 14
         +[0] size = 330 
         +[1] size = 240 
         +[2] size = 654 

这里我有三个轮廓,大小分别为 330、240,654

现在我的疑问是如何将 3 个对象的每个轮廓点复制到向量?

我想在calcOpticalFlowPyrLK函数中使用这个轮廓点作为prevPts

或者可以做什么?

【问题讨论】:

只需使用contours[0]contours[1]contours[2] 即可。 @herohuyongtao 我应该如何从轮廓复制到vector<vector<Point>> contoursCvPoint2D32f MyVector CvPoint2D32f 只是一个点,如果您需要复制一个,请查看this thread。 【参考方案1】:

- 对我上面的评论再做一点解释。

calcOpticalFlowPyrLK()可以直接使用vector<Point>vector<Point2f>作为参数prevPts

prevPts – 需要找到流的二维点向量;点坐标必须是单精度浮点数。

也就是说,您只需对 3 个对象(它们的类型为 vector<Point>)使用 contours[0]contours[1]contours[2] 并将它们传递给 calcOpticalFlowPyrLK()

【讨论】:

【参考方案2】:

herohuyongtao给了你正确的答案。您应该通过选择他的答案作为正确答案来给予他认可。

我只是添加一个小解释:您的轮廓是向量的向量。它有 3 个元素,每个元素都是一个点向量(可使用 .x 和 .y 访问)。这正是 prevPts 所要求的。 通过将 contour[i] 发送到函数,您将发送第 i 个点向量。 看这里:http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html

【讨论】:

以上是关于如何检索轮廓点 - 使用 opencv 转换为矢量?的主要内容,如果未能解决你的问题,请参考以下文章

使用python在opencv中创建自己的轮廓

如何使用 C++ 将点拟合到曲线?

opencv cv.findContours 函数详解 图像轮廓层级 图像轮廓检索方式详解

OpenCV 将任意轮廓的形状转换为矩形

如何将轮廓层次结构从 python openCV 转换为 emgu cv 以查找封闭轮廓

将矢量轮廓区域(边界)转换为光栅图(像素网格)