OpenCV 中凸壳函数的输出向量是什么?

What is the output vector of the convexHull function in OpenCV?

本文关键字:输出 向量 是什么 函数 OpenCV      更新时间:2023-10-16

C++:

void
convexHull(InputArray points,
           OutputArray hull,
           bool clockwise=false,
           bool returnPoints=true);

OutputArray hull给出的描述如下:

hull – 输出凸包。它要么是索引的整数向量,要么是点的向量。在第一种情况下,hull元素是原始数组中凸包点的从 0 开始的索引(因为凸包点集是原始点集的子集)。在第二种情况下,hull元素是凸包点本身。

  1. 那么什么是索引的整数向量?
  2. 如果我使用输出数组作为vector<vector<int>>,我会得到什么?
  3. 我可以打印结果吗?

回答您的具体问题:

    索引
  1. 的整数向量(其中索引从 0 开始)是指示 InputArray 点的哪些点位于凸包点集中的索引。

  2. 您可以使用整数向量或点向量。在第一种情况下,您将获得允许访问给定输入点数组的实际点的索引。在第二种情况下,您可以直接从输出数组中读取点的坐标。

  3. 这个问题并不完全清楚,因为您没有提到要在哪里打印结果。假设您想在图像中显示它,则可以使用折线绘制凸包。具体来说(查看cv::p olylines了解更多信息):

    void cv::polylines  (
        InputOutputArray     img,
        InputArrayOfArrays   pts,
        bool                 isClosed,
        const Scalar &       color,
        int                  thickness = 1,
        int                  lineType = LINE_8,
        int                  shift = 0 
    )
    

    要在控制台中打印点的坐标,假设输出向量是整数的向量,因此索引:

    size_t hull_size = hull.size();
    for (size_t i = 0; i < hull_size; i++)
    {
        std::cout << points[hull[i]] << std::endl;
    }