OpenCV中convexHull函数的输出向量是多少?

Posted

技术标签:

【中文标题】OpenCV中convexHull函数的输出向量是多少?【英文标题】:What is the output vector of the convexHull function in OpenCV? 【发布时间】:2016-03-19 06:07:35 【问题描述】:

C++:

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

OutputArray hull上给出的描述如下:

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

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

【问题讨论】:

如果您的输入是包含 20 个点的轮廓,输出是包含整数的向量:0,7,12,17 那么您的凸包是位置 0,7,12,17 的点你的输入向量。 【参考方案1】:

回答您的具体问题:

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

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

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

    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;
    
    

【讨论】:

最后一个问题我想要的是在控制台上打印索引点。 对于 outputVector 中的每个索引:std::cout

以上是关于OpenCV中convexHull函数的输出向量是多少?的主要内容,如果未能解决你的问题,请参考以下文章

opencv —— convexHull 寻找并绘制凸包

在openCV2 Python中绘制convexHull

使用 OpenCV 凸包和凸缺陷函数的手指跟踪/计数

opencv 9 -- 轮廓 其他操作

opencv 9 -- 轮廓 其他操作

Python OpenCV - ConvexHull 错误“点不是 numpy 数组,也不是标量”?