【opencv】示例-minarea.cpp 如何寻找一组随机生成的点的最小外接矩形、三角形和圆...

0282195e505c29bb34ce6a26e9624a78.png

29c596cba960098b5514a2804c6dbd5e.jpeg

281d7dec10b6fab7f92e3fc0e8eaf947.jpeg

// 包含OpenCV库的高GUI模块和图像处理模块的头文件
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"// 包含标准输入输出流的头文件
#include <iostream>// 使用命名空间cv和std,这样我们就可以直接使用OpenCV和标准库的功能,而不需要每次都指定命名空间
using namespace cv;
using namespace std;// 一个静态函数,用于显示帮助信息
static void help()
{// 输出程序的帮助信息,告诉用户程序功能和使用方法cout << "This program demonstrates finding the minimum enclosing box, triangle or circle of a set\n"<< "of points using functions: minAreaRect() minEnclosingTriangle() minEnclosingCircle().\n"<< "Random points are generated and then enclosed.\n\n"<< "Press ESC, 'q' or 'Q' to exit and any other key to regenerate the set of points.\n\n";
}// main函数,程序的入口
int main( int /*argc*/, char** /*argv*/ )
{// 调用帮助信息函数help();// 创建一个500x500像素的黑色空图像Mat img(500, 500, CV_8UC3, Scalar::all(0));// 获取随机数生成器的引用RNG& rng = theRNG();// 无限循环直到用户决定退出(按下ESC或'q'键)for(;;){int i, count = rng.uniform(1, 101); // 随机生成点的数量,范围1到100vector<Point> points; // 用来存储随机点的向量// 生成一组随机点for( i = 0; i < count; i++ ){Point pt; // 创建一个点结构// 点的x坐标在图像宽度的1/4到3/4之间随机生成pt.x = rng.uniform(img.cols/4, img.cols*3/4);// 点的y坐标在图像高度的1/4到3/4之间随机生成pt.y = rng.uniform(img.rows/4, img.rows*3/4);// 将生成的点添加到向量中points.push_back(pt);}// 找到包围点的最小面积矩形框Point2f vtx[4]; // 声明一个存储矩形四个顶点的数组// 使用minAreaRect()计算点集可以包围的最小矩形区域和角度RotatedRect box = minAreaRect(points);// 将计算的矩形区域的四个顶点赋值给vtx数组box.points(vtx);// 找到包围点的最小面积三角形vector<Point2f> triangle; // 创建向量存储三角形的顶点// 使用minEnclosingTriangle()计算可以包围点集的最小三角形minEnclosingTriangle(points, triangle);// 找到包围点的最小面积圆形Point2f center; // 圆心float radius = 0; // 半径// 使用minEnclosingCircle()计算可以包围点集的最小圆形及其半径minEnclosingCircle(points, center, radius);// 将图像重置为黑色img = Scalar::all(0);// 在图像上画出这些点for( i = 0; i < count; i++ )// 以点为中心,半径为3,红色,实心填充,抗锯齿方式画圆circle( img, points[i], 3, Scalar(0, 0, 255), FILLED, LINE_AA );// 画出矩形框for( i = 0; i < 4; i++ )// 用绿色线条将矩形的四个顶点连接起来,形成边框line(img, vtx[i], vtx[(i+1)%4], Scalar(0, 255, 0), 1, LINE_AA);// 画出三角形for( i = 0; i < 3; i++ )// 用黄色线条将三角形的三个顶点连接起来,形成边框line(img, triangle[i], triangle[(i+1)%3], Scalar(255, 255, 0), 1, LINE_AA);// 画出圆形// 以计算得到的圆心,半径,用青色线条画出圆形circle(img, center, cvRound(radius), Scalar(0, 255, 255), 1, LINE_AA);// 显示最终绘制的图像imshow( "Rectangle, triangle & circle", img );// 等待键盘输入char key = (char)waitKey();if( key == 27 || key == 'q' || key == 'Q' ) // 检查是否是退出键'ESC'break; // 如果是则退出循环}return 0; // 程序成功结束
}

此段代码的主要功能是:利用OpenCV库生成随机点集,并计算并展示这些点的最小外包矩形、三角形和圆形。用户可以通过按键重新生成不同的随机点集,或者按ESC/Q退出程序。程序中利用了OpenCV的随机数生成函数、绘图函数以及几何形状的计算函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616612.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础-知识点03(面试|学习)

Java基础-知识点03 String类String类的作用及特性String不可以改变的原因及好处String、StringBuilder、StringBuffer的区别String中的replace和replaceAll的区别字符串拼接使用还是使用StringbuilderString中的equal()与Object方法中equals()区别String a new String("a…

mutable关键字的作用(c++)

常成员变量、常成员函数与常对象 常成员变量 声明为常成员变量的成员变量&#xff0c;在对象被创建后就不能被修改常成员变量必须在对象的构造函数初始化列表中赋值&#xff0c;不能在构造函数体中赋值初始化列表的执行是在函数体执行之前就执行了的。上面这种写法和下面的写…

vmware安装win10及ubuntu

安装win10 新建一个文件夹 选择刚才创建的文件夹 选择需要保存文件的位置&#xff0c;还是选择刚才创建的文件夹 选择自定义硬件 选择下载的win10镜像iso文件,导入后&#xff0c;点击完成即可 接下来就是下一步 没有此电脑&#xff0c;可以点击个性化-》主题-》桌面设置…

编曲知识17:音高修正 节奏修正 压缩器应用 压缩数值算法

34届音高修正 节奏修正 压缩器应用 压缩数值算法独立音乐人训练营基地,七年在线教育编曲系统授课,培养了几千名独立音乐人https://app8epdhy0u9502.pc.xiaoe-tech.com/detail/l_660be2e3e4b023c02af7abbc/4?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 修音 准备工作 …

Next.js是什么

前言&#xff1a;最近一年都在nextjs浩瀚的海洋中游来游去&#xff0c;在使用过程中算是小有心得&#xff0c;趁着有那么一点点时间温故而知新&#xff0c;总结一波&#xff08;主要中文文档实在太少&#xff0c;它更新的速度又快&#xff0c;很多时候自己翻文档看issue实在头疼…

RISC-V技术变革:一颗芯片,CPU与GPU合二为一

一颗万能的RISC-V芯片: 将CPU和GPU整合到一个核中 X-Silicon 推出创新的 RISC-V 芯片架构,将 CPU、矢量功能和 GPU 加速无缝集成。这种开源混合芯片专为多功能工作负载而设计,包括人工智能,旨在通过高效处理提升性能。 革命性的 CPU/GPU 混合处理器全新的 RISC-V CPU/GPU 混…

OpenAI CEO山姆·奥特曼推广新AI企业服务,直面微软竞争|TodayAI

近期&#xff0c;OpenAI的首席执行官山姆奥特曼在全球多地接待了来自《财富》500强公司的数百名高管&#xff0c;展示了公司最新的人工智能服务。在旧金山、纽约和伦敦的会议上&#xff0c;奥特曼及其团队向企业界领袖展示了OpenAI的企业级产品&#xff0c;并进行了与微软产品的…

【fastapi】搭建第一个fastapi后端项目

本篇文章介绍一下fastapi后端项目的搭建。其实没有什么好说的&#xff0c;按照官方教程来即可&#xff1a;https://fastapi.tiangolo.com/zh/ 安装依赖 这也是我觉得python项目的槽点之一。所有依赖都安装在本地&#xff0c;一旦在别人电脑上编写项目就又要安装一遍。很扯淡。…

我的新书,在西西弗书店上架了!

大家好&#xff0c;我是程序员小灰。今天告诉大家一个好消息&#xff0c;我的新书在西西弗书店上架了&#xff01; 熟悉小灰的朋友都知道&#xff0c;我以前是京东的一名程序员&#xff0c;现在全职投入到IT领域的自媒体创作。在2019年&#xff0c;我出版了人生中的第一本书《漫…

普乐蛙VR航天体验馆设备VR太空飞船VR元宇宙展厅

三天小长假就要来啦&#xff01;五一假期也即将到来。老板们想捉住人流量这个财富密码吗&#xff1f;那快快行动起来&#xff01;开启VR体验项目&#xff0c;假期赚翻天&#xff01;小编亲测&#xff01;&#xff01;这款设备刺激好玩&#xff0c;想必会吸引各位家长小孩、学生…

Android开发:Camera2+MediaRecorder录制视频后上传到阿里云VOD

文章目录 版权声明前言1.Camera1和Camera2的区别2.为什么选择Camera2&#xff1f; 一、应用Camera2MediaPlayer实现拍摄功能引入所需权限构建UI界面的XMLActivity中的代码部分 二、在上述界面录制结束后点击跳转新的界面进行视频播放构建播放界面部分的XMLActivity的代码上述代…

b站江科大stm32笔记(持续更新)

b站江科大stm32笔记&#xff08;持续更新&#xff09; 片上资源/外设引脚定义表启动配置推挽开漏oc/od 门漏极/集电极 电阻的上拉下拉输入捕获输入捕获通道主从触发模式输入捕获基本结构PWMI基本结构PWMPSC ARR CRR输入捕获模式测频率TIM_PrescalerConfig()初始化输入捕获测频法…