[C++] opencv - approxPolyDP(多边形拟合)函数介绍和使用场景

这篇具有很好参考价值的文章主要介绍了[C++] opencv - approxPolyDP(多边形拟合)函数介绍和使用场景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

approxPolyDP()函数介绍

OpenCV中的approxPolyDP()函数用于对形状进行逼近,以减少多边形的顶点数,可以用于对图像轮廓点进行多边形拟合。

函数原型如下:

void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed );

其中,

curve是输入的点集,类型为InputArray,可以是Matvector<Point>等;

approxCurve是输出的点集,类型为OutputArray,也是Mat类型;

epsilon是精度,类型为double;

closed是一个布尔值,表示是否闭合多边形。

使用场景

在计算机视觉和图像处理中,approxPolyDP()函数用于对图像轮廓点可以进行多边形拟合,用于检测和识别形状。

使用案例

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    // 读取灰度图像
    Mat src = imread("./simple_chart.png");
    if (src.empty())
    {
        cout << "无法读取图像" << endl;
        return -1;
    }
    imshow("原图", src);
    waitKey(0);

    Mat gray;
    cvtColor(src, gray, COLOR_BGR2GRAY);
    imshow("灰度图", gray);
    waitKey(0);

    // 二值化图像
    Mat binary;
    threshold(gray, binary, 50, 255, THRESH_BINARY);
    imshow("二值化图", binary);
    waitKey(0);

    // 查找轮廓
    vector<vector<Point>> contours;
    vector<Vec4i> hierarchy;
    findContours(binary, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

    cout << "发现轮廓的数量:" << contours.size() << endl;

    // 绘制轮廓
    for (size_t i = 0; i < contours.size(); ++i)
    {
        auto contour = contours[i];
        vector<Point> approx;
        approxPolyDP(contour, approx, arcLength(contour, true) * 0.02, true);

        // 根据顶点数量判断形状
        // 如果为4,则为矩形或者正方形
        if (approx.size() == 4)
        {
            Rect rect = boundingRect(approx);
            rectangle(src, rect, Scalar(255, 255, 255), 2);
            // 判断是不是正方形
            if (((rect.width-rect.height)/(double) rect.height) <=0.02){
                cout << "这是正方形" << endl;
            }
        }
        // 如果为3,则为三角形
        else if(approx.size()== 3){
            drawContours(src, contours, i, Scalar(255, 255, 0), 2);
        }
        // 如果其他形状,比如圆,复杂多边形等
        else{
            drawContours(src, contours, i, Scalar(255, 0, 255), 2);
        }
    }

    // 显示结果
    imshow("轮廓绘制", src);
    waitKey(0);

    return 0;
}

原图:

opencv approxpolydp,opencv,C++,c++,opencv

 灰度图:

opencv approxpolydp,opencv,C++,c++,opencv

二值化图:

opencv approxpolydp,opencv,C++,c++,opencv

 轮廓图:

opencv approxpolydp,opencv,C++,c++,opencv

结论

在计算机视觉和图像处理中,approxPolyDP()函数用于对图像轮廓点可以进行多边形拟合,用于检测和识别形状。另外在图像分割、目标跟踪和机器人导航等领域,通过减少多边形的顶点数,可以提高算法的效率和准确性。文章来源地址https://www.toymoban.com/news/detail-839680.html

到了这里,关于[C++] opencv - approxPolyDP(多边形拟合)函数介绍和使用场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV(10): 轮廓近似—多边形拟合,边界矩形与边界圆形

    轮廓近似(Contour Approximation)是指对轮廓进行逼近或拟合,得到近似的轮廓。在图像处理中,轮廓表示了图像中物体的边界,因此轮廓近似可以用来描述和识别物体的形状。 多边形拟合(Approximating Polygons)是将轮廓逼近成一个由直线段构成的多边形。常见的有最小包围矩形

    2024年02月10日
    浏览(47)
  • OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合

    目录 1.轮廓外接最大矩形boundingRect() 2.轮廓外接最小矩形minAreaRect() 3.轮廓外接多边形approxPolyDP() 1.轮廓外接最大矩形boundingRect() Rect cv::boundingRect ( InputArray array ) array:输入的灰度图像或者2D点集,数据类型为vectorPoint或者Mat。 示例代码:  轮廓外接最大矩形的结果: 2.轮廓外接

    2024年02月09日
    浏览(73)
  • 使用OpenCV的函数polylines()绘制多条相连的线段和多边形;使用函数fillPoly()绘制带填充效果的多边形

    函数polylines()可用来根据点集绘制多条相连的线段,也可用来绘制多边形。 函数polylines()有两种原型,这里只向大家介绍比较常用的那种原型。 函数polylines()的C++原型如下: 函数polylines()的Python原型如下: 函数polylines()的参数意义如下: img—绘制的多条相连线段或多边形所在

    2024年02月04日
    浏览(70)
  • opencv 之 外接多边形(矩形、圆、三角形、椭圆、多边形)使用详解

    本文主要讲述opencv中的外接多边形的使用: 多边形近似 外接矩形、最小外接矩形 最小外接圆 外接三角形 椭圆拟合 凸包 将重点讲述最小外接矩形的使用 给一个opencv官方的例程: 过程图像如下: 椭圆拟合一般用于轮廓提取之后: 凸包绘制 计算两个旋转矩形交集: C++版的最

    2024年02月09日
    浏览(104)
  • 基于C++ 的OpenCV绘制多边形,多边形多条边用不用的颜色绘制

    使用基于C++的OpenCV库来绘制多边形,并且为多边形的不同边使用不同的颜色,可以按照以下步骤进行操作: 首先,确保你已经安装了OpenCV库并配置好了你的开发环境。 导入必要的头文件: 创建一个空白的图像,然后绘制多边形,并为每条边选择不同的颜色: 在这个示例中,

    2024年02月13日
    浏览(58)
  • opencv 判断点在多边形内外

            基于Python 和 OpenCV 画出多边形,以及判断某个点是不是在多边形内。         函数定义:cv2.pointPolygonTest(contour, pt, measureDist)         函数功能:找到图像里的点和轮廓之间的最短距离. 它返回的距离当点在轮廓外的时候是负值,当点在轮廓内是正值,如果

    2024年02月12日
    浏览(65)
  • Python:opencv画点、圆、线、多边形、矩形

    简介 :机器学习视觉方向一般都需要在图像中添加标注框,标注框有着很大的用处,特别是对图像中某些需要关注的特征起到圈定的效果,方便对特征选择进行处理。 相关攻略: 机器学习:基本流程 Python:调用摄像头使用cv2库录制视频 Python:视频拆分成一帧一帧的图片

    2024年02月04日
    浏览(92)
  • python opencv 绘制矩形、圆、线、多边形

    👨‍💻 个人简介: 深度学习图像领域工作者 🎉 总结链接:              链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:                     📌 1.工作中常用深度学习脚本                     📌 2.to

    2024年02月03日
    浏览(124)
  • OpenCV 对轮廓进行多边形逼近(Polygon Approximation)

    在 OpenCV 中, cv::approxPolyDP 是一个函数,用于对轮廓进行多边形逼近(Polygon Approximation)。它可以将复杂的轮廓逼近为简化的多边形,从而减少轮廓的数据点,使轮廓更加紧凑。 函数原型如下: 参数说明: curve : 输入的轮廓点,可以是一个 std::vectorcv::Point 或 cv::Mat 类型的数

    2024年02月15日
    浏览(40)
  • Android OpenCV(三十七):轮廓外接多边形

    参数四:closed,逼近曲线是否闭合的标志,true表示封闭,false,表示不封闭。 该方法使用的是 Douglas-Peucker algorithm(道格拉斯-普克算法) 。 Douglas-Peukcer算法 由D.Douglas和T.Peueker于1973年提出,也称为 拉默-道格拉斯-普克算法 、 迭代适应点算法 、 分裂与合并算法 、 D-P算法

    2024年04月13日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包