OpenCV,findContours - 为什么我们需要一个<vector<vector<Point>>来存储轮廓?为什么不直接<矢量<Point>&

OpenCV, findContours - Why do we need a <vector<vector<Point>> to store the contours? Why not just <vector<Point>>?

本文关键字:lt gt Point vector 存储 轮廓 矢量 为什么不 OpenCV 我们 为什么      更新时间:2023-10-16

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

<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想要一个点的向量。

对于您的第一个问题,为什么在所有n>0的contours[n][k]中都没有存储轮廓点,您的轮廓向量中可能只有一个轮廓,即contours[0]。

矢量中的矢量是因为

vector<Point> 

嵌套在第一个矢量内只存储一个轮廓。OpenCV使用

 vector<vector<Point>> 

以存储多个轮廓。当OpenCV找到Contours()时,这是必需的;因为它需要使用多个轮廓来表示连接的组件。