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

using namespace std;
using namespace cv;

Mat img1, img2, img3, img4, img_result, img_gray1, img_gray2, img_gray3, img_canny1;

char win1[] = "window1";
char win2[] = "window2";
char win3[] = "window3";
char win4[] = "window4";
char win5[] = "window5";

int thread_value = 100;
int max_value = 255;
RNG rng1(12345);

int Demo_Convex_Hull();
void Demo_1(int, void*);

//发现凸包
int Demo_Convex_Hull()
{
  namedWindow(win1, CV_WINDOW_AUTOSIZE);
  namedWindow(win2, CV_WINDOW_AUTOSIZE);
  //namedWindow(win3, CV_WINDOW_AUTOSIZE);

  img1 = imread("D://images//1//temp2.jpg");
  //img2 = imread("D://images//1//p5_1.jpg");
  if (img1.empty())
  {
    cout << "could not load image..." << endl;
    return 0;
  }

  imshow(win1, img1);
  img4 = Mat::zeros(img1.size(),CV_8UC3);

  //转灰度图
  cvtColor(img1, img_gray1, CV_BGR2GRAY);
  //模糊处理
  blur(img_gray1, img2, Size(3, 3), Point(-1, -1),BORDER_DEFAULT);

  createTrackbar("track", win1, &thread_value, max_value, Demo_1);
  Demo_1(0,0);

  return 0;
}

void Demo_1(int,void*)
{
  vector<vector<Point>> vec_p;
  vector<Vec4i> vec_4i;

  threshold(img2, img3, thread_value, max_value, THRESH_BINARY);
  findContours(img3, vec_p, vec_4i, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));

  vector<vector<Point>> convexs(vec_p.size());
  for (size_t i=0;i<vec_p.size();i++)
  {
    convexHull(vec_p[i], convexs[i], false, true);
  }

  for (size_t j=0;j<vec_p.size();j++)
  {
    Scalar color_1 = Scalar(rng1.uniform(0,255), rng1.uniform(0, 255), rng1.uniform(0, 255));
    drawContours(img4, vec_p, j, color_1, 2, LINE_8, vec_4i, 0, Point(0, 0));
    drawContours(img4, convexs, j, color_1, 2, LINE_8, vec_4i, 0, Point(0, 0));
  }
  imshow(win2,img4);
}

int main()
{
  Demo_Convex_Hull();

  waitKey(0);
  return 0;
}

Opencv Convex Hull (凸包)的更多相关文章

  1. [GYM 100492A] Average Convex Hull 凸包好题

    大致题意: 给出一个点集,其中有一个点有相同的几率会被删除,求删除之后的点集够成的凸包上的点的平均数. 首先看到题目,可以考虑枚举删除的点,将其凸包上前后两点以及两点间凸包内所有点构建凸包,因为凸包内 ...

  2. 2.2 convex hull凸包

    1.定义:一组平面上的点,求一个包含所有点的最小的凸多边形,就是凸包问题. 利用编程解决凸包问题,应该得到一组逆时针的顶点的顺序集合,在边上但不是顶点,则不包含在集合里. 2.机械的方法:将点所在的位 ...

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

    Link 一句话题意: 求出 \(\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\tau(i)\tau(j)\tau(gcd(i,j))\) 前置知识 \(diri ...

  4. 【题解】「MCOI-02」Convex Hull 凸包

    题目戳我 \(\text{Solution:}\) \[\sum_{i=1}^n \sum_{j=1}^n \rho(i)\rho(j)\rho(\gcd(i,j)) \] \[=\sum_{d=1} ...

  5. OpenCV入门之寻找图像的凸包(convex hull)

    介绍   凸包(Convex Hull)是一个计算几何(图形学)中的概念,它的严格的数学定义为:在一个向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包.   在图像处理过程中,我们 ...

  6. opencv::凸包-Convex Hull

    概念介绍 什么是凸包(Convex Hull),在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部. 正式定义:包含点集合S中所有点的最小凸多边形称为凸包 Graham扫描算法 首先选 ...

  7. 凸包(Convex Hull)构造算法——Graham扫描法

    凸包(Convex Hull) 在图形学中,凸包是一个非常重要的概念.简明的说,在平面中给出N个点,找出一个由其中某些点作为顶点组成的凸多边形,恰好能围住所有的N个点. 这十分像是在一块木板上钉了N个 ...

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

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

  9. OpenCV学习(29) 凸包(convexhull)

    在opencv中,通过函数convexHulll能很容易的得到一系列点的凸包,比如由点组成的轮廓,通过convexHull函数,我们就能得到轮廓的凸包.下面的图就是一些点集的凸包. 求凸包的代码如下: ...

随机推荐

  1. JDK1.5java新特性

    JDK1.5java增加的新特性: 自动装箱/拆箱      增强for     泛型      枚举      静态导入      可变参数 1 自动装箱/拆箱 * JDK1.5允许开发人员把一个基 ...

  2. Python 函数 -globals()

    globals() globals() 函数会以字典类型返回当前位置的全部全局变量. 实例: >>>a='runoob' >>> print(globals()) ...

  3. 7.Python使用pandans遇到的坑

    1.开始入门Pandas,然后跟着网上的例子,编写以下代码: import pandas as pd import datetime import pandas.io.data as web star ...

  4. O/R映射及OID方案

    一.O/R映射层基本介绍 O/R映射层是持久层的一个特例,它的数据模型是对象模型(Object),存储模型是关系模型(Relational),cmp和Hibernate是对象模型到关系模型之间转换的两 ...

  5. 初学FPGA一些建议

    数字电路: 这是大学里的基本课程 ,涵盖了一般数字电路的组合电路.时序电路.寄存器传输.储存器以及可编程逻辑电路(FPGA 就是其中一种),还有比较好的添加了计算机的指令集结构.处理器设计等计算机方面 ...

  6. HDOJ5875(线段树)

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  7. (转)Inno Setup入门(十六)——Inno Setup类参考(2)

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250967 这里将接着在前面的基础上介绍如何在自定义页面上添加按钮 ...

  8. Jquery获取用户控件页面中控件的值

    $('#<%= txt_P_name.ClientID%>').val()

  9. Shiro的学习

    Apache Shiro 是 Java 的一个安全(权限)框架.它可以非常容易的开发出足够安全的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境 . Shiro 可以完成:认证 ...

  10. mysqldumpl备份

    mysqldump --databases mydatabase --lock-all-tables --flush-logs mysqldump -h10. -uroot -p密码 --databa ...