zoukankan      html  css  js  c++  java
  • 寻找物体的凸包 opencv

    凸包的含义:

      在二维平面上给定点集,凸包就是将最外层的点连接起来构成的凸多边形。并且这个凸多边形能包含点集中所有的点。
    OPENCV中:

    convexHull函数用于寻找图像点集中的凸包。它有六个输入参数。

    第一个参数:输入的二维点集
    第二个参数:输出的凸包。为数组类型的hull
    第三个参数:bool类型的clockwise。当此标志符为真时,输出的凸包为顺时针方向,否则,为逆时针方向。
    第四个参数:bool类型的returnPoints,操作标识符,默认值为true。

     1 #include<opencv2/opencv.hpp>
     2 #include<iostream>
     3 
     4 using namespace std;
     5 using namespace cv;
     6  
     7 int main()
     8 {
     9     Mat image(600, 600, CV_8UC3);  //创建一个600*600 8位无符号字符型的3通道图像
    10     RNG& rng = theRNG();     ////用其引用来接收theRNG函数返回的随机数生成器
    11 
    12     while (1)
    13     {
    14         char key; // 键值
    15         int count = rng.uniform(3,103);//随机生成点的数量
    16         vector<Point>points;  //二维点集存在这个向量里面
    17 
    18         for (int i = 0; i < count; i++)   //点的坐标
    19         {
    20             Point point;
    21             point.x = rng.uniform(image.cols /4, image.cols * 3 / 4);
    22             point.y = rng.uniform(image.rows / 4, image.cols * 3 / 4);
    23             points.push_back(point);  //生成的点放进points这个向量里面
    24         }
    25         //检测凸包
    26         vector<int> hull;  //第二个参数声明
    27         convexHull(Mat(points), hull, true);
    28 
    29         image = Scalar::all(0);//初始化图像为全黑色
    30         //随机化点的颜色 并画出
    31         for (int i = 0; i < count; i++)
    32         {
    33             circle(image, points[i], 3, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)), FILLED, LINE_AA);
    34         }
    35         //准备参数
    36         int hullcount = (int)hull.size();//凸包的边数
    37         Point point0 = points[hull[hullcount - 1]]; //连接凸包边的坐标点
    38         //绘制凸包的边
    39         for (int i = 0; i < hullcount; i++)
    40         {
    41             Point point = points[hull[i]];
    42             line(image, point0, point, Scalar(255, 255, 255), 2, LINE_AA);
    43             point0 = point;
    44         }
    45         //显示效果图
    46         imshow("凸包检测示例", image);
    47         //按下ESC退出程序
    48         key = (char)waitKey();
    49         if (key == 27)
    50             break;
    51     }
    52 
    53     return 0;
    54 }

    检测效果:

  • 相关阅读:
    MySQL的安装和基本管理
    前端基础之jQuery
    前端基础之BOM和DOM
    前端基础之JavaScript
    前端基础之CSS
    前端基础之HTML
    五,pod控制器应用进阶
    运维都该会的Socket知识!
    四,k8s集群资源清单定义入门
    三,k8s集群的应用入门
  • 原文地址:https://www.cnblogs.com/carlber/p/9720223.html
Copyright © 2011-2022 走看看