【问题标题】:Mark points on contour line using OpenCV使用 OpenCV 在等高线上标记点
【发布时间】:2023-04-01 21:47:02
【问题描述】:

我想在植物叶子的边缘线上做一组相似距离的点(如下图所示)。我想在叶子的边缘线上制作红色的小方块。我将叶子边缘线的点集存储为轮廓。

有没有办法使用 OpenCV/C++ 做到这一点? (特别是我想要一种方法来存储这些点以供将来使用应用程序)

提前致谢。

【问题讨论】:

    标签: c++ opencv image-processing contour edge-detection


    【解决方案1】:

    您需要为已经找到的轮廓计算approxPolyDP,approxPolyDP 以指定的精度逼近多边形曲线,您可以在其中调整参数 epsilon 以获得所需的结果。

    在此处查看example,了解如何使用 approxPolyDP。

    【讨论】:

      【解决方案2】:
      1. FindContours 提取图像的轮廓。 (将您的图像转换为灰度,之前应用二进制阈值和精明边缘检测,以获得更好的结果。)

        vector> 轮廓; cv::findContours(src_img, 轮廓, 层次结构, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

      2. 画出轮廓的所有点。代码示例:

        cv::Mat draw = cv::Mat::zeros(500,500, CV_8UC3);

        int contour_id = 1;

        for(int i = 0;i

      除此之外,您还可以对轮廓上的所有点使用ApproxPolyDP 或 PointPolygonTest Opencv 函数。请参阅完整的详细信息和代码示例here。正如您可以在链接上阅读的那样,此函数返回当点在轮廓之外时为负数的距离,当点在轮廓内时返回正数,如果点在轮廓上则返回零。 所以你必须只绘制返回零的点。

      问候

      【讨论】:

        猜你喜欢
        • 2020-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多