【opencv】示例-convexhull.cpp 随机生成一些点,然后计算这些点的凸包并显示出来...

f32d885f4cc725d35b714aa35d326e42.png

28e92995d8cb7a4c0853898dc8493e6d.png

cb816f91656ddf7113514562eeb85c30.png

// 包含opencv2的图像处理和图形用户界面库
//include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>


// 使用opencv和标准命名空间中的对象和函数
using namespace cv;
using namespace std;


// 定义一个帮助函数,解释程序如何被调用
static void help(char** argv)
{
    cout << "\nThis sample program demonstrates the use of the convexHull() function\n"
         << "Call:\n"
         << argv[0] << endl;
}


// 程序的主入口点
int main( int argc, char** argv )
{
    // 解析命令行参数
    CommandLineParser parser(argc, argv, "{help h||}");
    // 如果请求帮助,则调用help函数并退出程序
    if (parser.has("help"))
    {
        help(argv);
        return 0;
    }
    // 创建一个空白图像
    Mat img(500, 500, CV_8UC3);
    // 获取随机数生成器的引用
    RNG& rng = theRNG();


    // 无限循环直到用户终止
    for(;;)
    {
        // 随机确定点的数量
        int i, count = (unsigned)rng%100 + 1;


        // 创建一个点的向量
        vector<Point> points;


        // 在图像内随机生成点,并将其添加到向量中
        for( i = 0; i < count; i++ )
        {
            Point pt;
            pt.x = rng.uniform(img.cols/4, img.cols*3/4);
            pt.y = rng.uniform(img.rows/4, img.rows*3/4);


            points.push_back(pt);
        }


        // 创建一个用于存储凸包的点的向量
        vector<Point> hull;
        // 计算点集的凸包
        convexHull(points, hull, true);


        // 将图像背景设置为黑色
        img = Scalar::all(0);
        // 在图像中用红色绘制所有点
        for( i = 0; i < count; i++ )
            circle(img, points[i], 3, Scalar(0, 0, 255), FILLED, LINE_AA);


        // 使用绿色线条在图像中画出凸包
        polylines(img, hull, true, Scalar(0, 255, 0), 1, LINE_AA);
        // 显示窗口
        imshow("hull", img);


        // 等待用户按键,如果是‘ESC’、‘q’或‘Q’则退出循环
        char key = (char)waitKey();
        if( key == 27 || key == 'q' || key == 'Q' ) // 'ESC'
            break;
    }


    // 程序结束返回0
    return 0;
}

这段代码是一个用C++编写的opencv应用程序。其功能是随机生成一些点,然后计算这些点的凸包并显示出来。用户可以不断生成新的点集和凸包,直到按下'ESC'、‘q’或‘Q’键退出程序。程序主体部分包括了创建一系列随机点,计算这些点的凸包并且绘制这些点和凸包。这样能够帮助用户可视化了解凸包在几何图形处理过程中的作用。

9f2b2690f3bf63156886b405cceb67ef.png

f4ea87a2c381668a2765ec502b7642d4.png

The End

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-11 17:30:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-11 17:30:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-11 17:30:06       82 阅读
  4. Python语言-面向对象

    2024-04-11 17:30:06       91 阅读

热门阅读

  1. [C++][算法基础]走迷宫(BFS)

    2024-04-11 17:30:06       35 阅读
  2. ubuntu添加固定路由

    2024-04-11 17:30:06       38 阅读
  3. C++:重载函数

    2024-04-11 17:30:06       34 阅读
  4. 2024-04-07 问AI: 在深度学习中,预训练是什么?

    2024-04-11 17:30:06       40 阅读
  5. wow-type文件说明

    2024-04-11 17:30:06       38 阅读
  6. OpenGL着色器实现纹理合并显示

    2024-04-11 17:30:06       30 阅读
  7. 计算机科学与技术CS考研408资料

    2024-04-11 17:30:06       34 阅读
  8. 学习 Rust 的第一天:基础知识

    2024-04-11 17:30:06       39 阅读