如何检索轮廓点 - 使用 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>> contours
到CvPoint2D32f 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 转换为矢量?的主要内容,如果未能解决你的问题,请参考以下文章
opencv cv.findContours 函数详解 图像轮廓层级 图像轮廓检索方式详解