OpenCV,findContours - 为什么我们需要一个<vector <vector <point>&gt;存储轮廓?为什么不只是<vector <point>&gt;?

时间:2015-11-01 01:32:15

标签: c++ opencv

当我有一个存储轮廓点的变量时:

<vector<vector<Point>> contours;

有点/坐标存储在:

contours[0][0].x; contours[0][0].y;
contours[0][1].x; contours[0][1].y;
...
contours[0][n].x; contours[0][n].y;

但是没有点/坐标存储在:

contours[1][0].x; contours[1][0].y;
contours[1][1].x; contours[1][1].y;
...
contours[1][n].x; contours[1][n].y;

contours[n][0].x; contours[n][0].y;
contours[n][1].x; contours[n][1].y;
...
contours[n][n].x; contours[n][n].y;

那么为什么我们需要一个点矢量矢量而不是一个点矢量? 点的向量是否足够?但openCV想要一个矢量点矢量。

1 个答案:

答案 0 :(得分:3)

对于你的第一个问题,为什么在轮廓[n] [k]中没有为所有n&gt;存储轮廓点? 0,轮廓矢量中可能只有一个轮廓,即轮廓[0]。

向量中向量的原因是因为

UITableViewCell
嵌套在第一个向量内的

只存储一个轮廓。 OpenCV使用

vector<Point> 

存储多个轮廓。当OpenCV执行findContours()时,这是必需的。因为它需要使用多个轮廓来表示连接的组件。