博客
关于我
opencv笔记(二十四)——得到轮廓之后找到凸包convex hull
阅读量:791 次
发布时间:2023-02-23

本文共 1620 字,大约阅读时间需要 5 分钟。

使用 OpenCV 进行轮廓凸包提取

在图像处理领域,轮廓的凸包提取是一个常见但重要的操作。凸包能够有效地简化复杂的轮廓形状,使其更易于分析和处理。OpenCV 提供了强大的工具来实现这一点,通过 convexHull 函数可以快速找到任意轮廓的凸包。

凸包的概念

凸包是指能够包围一个凸多边形的最小面积壳层。对于一个给定的轮廓,其凸包是所有可能的外壳中表面积最小的那个。通过凸包,我们可以简化轮廓形状,去除非必要的拐角和细节,得到一个最小的包围形状。

OpenCV 函数使用说明

OpenCV 提供了 convexHull 函数来实现凸包提取。该函数接收以下参数:

  • points:输入点集,可以是 vector<Point>Mat 类型。
  • hull:输出凸包点集。
  • clockwise:指定凸包的方向,默认为 false
  • returnPoints:忽略该参数,因为我们只需要点集。

函数的大致流程如下:

  • 初始化一个空的点集 hull
  • 遍历输入点集 contours,对每个轮廓调用 convexHull 函数。
  • 函数返回凸包点集,将其添加到 hull 中。
  • 代码示例

    以下是一个使用 convexHull 函数的完整示例:

    // 克隆源图像Mat src_copy = src.clone();Mat threshold_output;vector
    contours;vector
    hierarchy;// 阈值检测threshold(src_gray, threshold_output, thresh, 255, THRESH_BINARY);// 检测轮廓findContours(threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));// 初始化凸包点集vector
    > hull(contours.size());// 遍历每个轮廓for (int i = 0; i < contours.size(); i++) { convexHull(Mat(contours[i]), hull[i], false);}// 绘制轮廓和凸包Mat drawing = Mat::zeros(threshold_output.size(), CV_8UC3);for (int i = 0; i < contours.size(); i++) { Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); drawContours(drawing, contours, i, color, 1, 8, vector
    (), 0, Point()); drawContours(drawing, hull, i, color, 1, 8, vector
    (), 0, Point());}namedWindow("Hull demo", CV_WINDOW_AUTOSIZE);imshow("Hull demo", drawing);

    凸包绘制

    在绘制轮廓和凸包时,使用 drawContours 函数可以清晰地显示两者之间的差异。通过给每个轮廓分配不同的颜色,可以更直观地比较原轮廓和其凸包的形状。

    总结

    通过 OpenCV 的 convexHull 函数,可以轻松地从任意轮廓中提取其凸包。该函数强大且灵活,适用于多种实际场景。通过合理使用该函数,可以显著简化轮廓分析过程,提高图像处理效率。

    转载地址:http://bwpfk.baihongyu.com/

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 2024年AI初学者需要掌握的热门技能有哪些?
    查看>>
    OpenCV与AI深度学习 | CIB-SE-YOLOv8: 优化的YOLOv8, 用于施工现场的安全设备实时检测 !
    查看>>
    OpenCV与AI深度学习 | CoTracker3:用于卓越点跟踪的最新 AI 模型
    查看>>
    OpenCV与AI深度学习 | OpenCV中八种不同的目标追踪算法
    查看>>
    OpenCV与AI深度学习 | OpenCV图像拼接--Stitching detailed使用与参数介绍
    查看>>
    OpenCV与AI深度学习 | OpenCV如何读取仪表中的指针刻度
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(一) :直接拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(三):基于特征匹配拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(二) :基于模板匹配拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(四):基于Stitcher类拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测(建议收藏!)
    查看>>
    OpenCV与AI深度学习 | PaddleOCR 2.9 发布, 正式开源文本图像智能分析利器
    查看>>
    OpenCV与AI深度学习 | SAM2(Segment Anything Model 2)新一代分割一切大模型介绍与使用(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | T-Rex Label !超震撼 AI 自动标注工具,开箱即用、检测一切
    查看>>
    OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)
    查看>>
    OpenCV与AI深度学习 | YOLOv10在PyTorch和OpenVINO中推理对比
    查看>>
    OpenCV与AI深度学习 | YOLOv11来了:将重新定义AI的可能性
    查看>>
    OpenCV与AI深度学习 | YOLOv8自定义数据集训练实现火焰和烟雾检测(代码+数据集!)
    查看>>
    OpenCV与AI深度学习 | YOLOv8重磅升级,新增旋转目标检测,又该学习了!
    查看>>
    OpenCV与AI深度学习 | 一文带你读懂YOLOv1~YOLOv11(建议收藏!)
    查看>>