凸包的定义

  • 在一个多边形边缘或内部,任意两个点的连线都包含在多变形边界或者内部。
  • 正式定义:包含点集合 S 中所有点的最小凸多边形称为凸包。
  • 凸包是一个计算几何中常见的概念。给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它是能包含点集中所有点的。
  • 理解图形形状或轮廓的一种比较有用的方法便是计算一个物体的凸包,然后计算其图缺陷(convexity defects),。很多复杂物体的特性能很好的被这种缺陷表现出来。

凸包算法

  • Graham 扫描法
    参考:Graham扫描法

API说明

  • convexHull (
    InputArray points, // 输入的二维点集,来自 findContours
    OutputArray hull, // 凸包
    bool clockwise = false, // 操作方向标识符,true表示输出的凸包为顺时针方向,否则为逆时针,并且假定坐标系X轴指向右,Y轴指向上
    bool returnPoints = true // 操作标识符,当第二个参数是 vector 时,此标识被忽略(用法暂时未知)
    )

代码示例

Mat src, dst;
int threshold_value = 100;
void ControusDemo(int, void*);const char* INPUT_WIN = "input image";
const char* OUTPUT_WIN = "output image";
const char* MATCH_WIN = "match image";int main()
{src = imread("E:/Image/shou.jpg");if (src.empty()){cout << "could not load image..." << endl;return 0;}namedWindow(INPUT_WIN, WINDOW_AUTOSIZE);namedWindow(OUTPUT_WIN, WINDOW_AUTOSIZE);imshow(INPUT_WIN, src);cvtColor(src, src, CV_BGR2GRAY);blur(src, src, Size(3, 3), Point(-1, -1));createTrackbar("value:", OUTPUT_WIN, &threshold_value, 255, ControusDemo);ControusDemo(0, 0);waitKey(0);return 0;
}void ControusDemo(int, void*)
{Mat src_bin;vector<vector<Point>> contours;vector<Vec4i> hierachy;threshold(src, src_bin, threshold_value, 255, THRESH_BINARY);imshow("src_bin", src_bin);findContours(src_bin, contours, hierachy, RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));vector<vector<Point>> convexs(contours.size());for (int i = 0; i < contours.size(); i++){convexHull(contours[i], convexs[i], false, true);}dst = Mat::zeros(src.size(), CV_8UC3);RNG rng(12345);for (int i = 0; i < contours.size(); i++){Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));// 绘制轮廓drawContours(dst, contours, i, color, 1, LINE_AA, hierachy, 0, Point(0, 0));// 绘制凸包drawContours(dst, convexs, i, color, 1, LINE_AA, Mat(), 0, Point(0, 0));}imshow(OUTPUT_WIN, dst);
}

运行结果

凸包 (Convex Hull)相关推荐

  1. OpenCV 凸包Convex Hull

    OpenCV 凸包Convex Hull 凸包Convex Hull 目标 代码 结果 凸包Convex Hull 目标 在本教程中,您将学习如何: 使用OpenCV函数cv :: convexHul ...

  2. MATLAB凸包Convex hull运算

    凸包Convex hull运算(求离散点的边界) [k,a] = convhull(x,y); K = convulln(X, options); [K AV] = convexHull(DT); t ...

  3. R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集)、ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull)

    R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集).ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull) 目录

  4. 寻找凸包 (Convex Hull)

    凸包问题是算法中经典的题目了,最近算法课讲分治问题时提到了Convex Hull,算法导论的书上也花了篇幅讨论了Convex Hull的求解,主要是Graham方法. 为了能更好地理解分治和Graha ...

  5. P6810 「MCOI-02」Convex Hull 凸包

    P6810 「MCOI-02」Convex Hull 凸包 思路 ∑i=1n∑j=1mτ(i)τ(j)τ(gcd(i,j))∑d=1nτ(d)∑i=1nd∑j=1mdτ(id)τ(id)[gcd(i, ...

  6. Monotone Chain Convex Hull(单调链凸包)

    1 Monotone Chain Convex Hull(单调链凸包)算法伪代码: 2 //输入:一个在平面上的点集P 3 //点集 P 按 先x后y 的递增排序 4 //m 表示共a[i=0...m ...

  7. 清华计算几何大作业(一):CG2017 PA1-1 Convex Hull (凸包)

    CG2017 PA1-1 Convex Hull (凸包) 1. 前置知识 2. 思路分析 3. 伪代码 4. 可视化结果示例 5. 项目代码(待更新完整) 1.1.1 Numerical Tests ...

  8. JavaScript:实现Convex hull凸包问题算法(附完整源码)

    JavaScript:实现Convex hull凸包问题算法 function compare (a, b) {// Compare Function to Sort the points, a an ...

  9. matlab 凸包质心算法,求多边形凸包(线性算法)--陈氏凸包算法--Computing the convex hull of a simple polygon(源码)...

    陈氏凸包算法-算法参考:Computing the convex hull of a simple polygon 作者:Chern-Lin Chen 陈氏算法提供了一个线性效率求凸包的算法,本文使用 ...

最新文章

  1. 模块化编程AMDCommonJS
  2. 深度学习(计算机视觉)面试中问题(二)
  3. DEEPIN 20安装镜像进入LIVE模式
  4. leetcode 482. 密钥格式化(Java版)
  5. 一步步把SAP GUI的事务码配置到SAP Fiori Launchpad里
  6. c++【深度剖析shared_ptr】
  7. 一个行外人看中国的电子竞技
  8. 虚拟机Centos7配置网络
  9. subversion mysql_MySQL数据库之httpd+mysql+php+subversion
  10. python手写一个迭代器_搞清楚 Python 的迭代器、可迭代对象、生成器
  11. python程序-30分钟学会用Python编写简单程序
  12. ACM金牌选手算法讲解《线性表》
  13. MVC – 5.MVC设计模式和.NetMVC框架
  14. 【向生活低头】在有联想云教室的win10电脑上更新win10的 变不幸方法
  15. Ubuntu系统安装Ghostscript
  16. 神经网络软件有哪些,神经网络分析软件
  17. Can DBC文件翻译
  18. 《计算机组网试验-DNS域名服务协议 》杭州电子科技大学
  19. Selenium简单的163邮箱登录实例
  20. JDK8新特性03 Lambda表达式03_Java8 内置的四大核心函数式接口

热门文章

  1. 门户通专访草上飞:站长帮手网站长的好帮手
  2. Redis 集群配置教程
  3. 军品研制过程-转阶段
  4. Qt中的套件提示no complier set in kit和no debugger,出现黄色感叹号问题解决(MSVC2017)
  5. android 制作系统程序,教你制作定制版安卓系统(Android ROM)
  6. mysql 建表 identity_identity数据库表格创建方法
  7. STM32串口通信USART练习
  8. 面试题 请简述vue双向数据绑定原理
  9. 存储过程的优点和缺点
  10. QQ引流之伪装红包系列