OpenCV结构分析与形状描述符(21)计算包围给定点集的最小面积三角形函数minEnclosingTriangle()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

找到一个包围二维点集的最小面积三角形,并返回其面积。

该函数找到一个包围给定的二维点集的最小面积三角形,并返回其面积。给定的二维点集的输出结果如下面的图所示。二维点用红色表示,包围的三角形用黄色表示:
在这里插入图片描述
该算法的实现基于 O’Rourke 的 206和 Klee 与 Laskowski 的 144论文。O’Rourke 提供了一个 θ(n) 的算法来寻找具有 n 个顶点的二维凸多边形的最小包围三角形。由于 minEnclosingTriangle 函数接收一个二维点集作为输入,因此需要一个额外的预处理步骤来计算该二维点集的凸包。凸包(convexHull)函数的时间复杂度是 O(nlog(n)),这比 θ(n) 要高。因此,该函数的总体复杂度是 O(nlog(n))

函数原型

double cv::minEnclosingTriangle	
(InputArray 	points,OutputArray 	triangle 
)		

参数

  • 参数points 输入的二维点向量,深度为 CV_32S 或 CV_32F,存储在 std::vector<> 或 Mat 中。
  • 参数triangle 输出的三维点向量,定义三角形的三个顶点。OutputArray 的深度必须为 CV_32F。

返回值

返回的是三角形的面积

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>int main()
{// 创建一个空白的图像cv::Mat image = cv::Mat::zeros( 300, 300, CV_8UC3 );// 构造一个包含多个点的向量std::vector< cv::Point2f > points;points.push_back( cv::Point2f( 100, 100 ) );points.push_back( cv::Point2f( 150, 90 ) );points.push_back( cv::Point2f( 150, 140 ) );points.push_back( cv::Point2f( 200, 100 ) );points.push_back( cv::Point2f( 150, 150 ) );points.push_back( cv::Point2f( 160, 155 ) );points.push_back( cv::Point2f( 100, 200 ) );points.push_back( cv::Point2f( 200, 200 ) );// 定义输出变量std::vector< cv::Point2f > triangle;// 计算最小面积三角形cv::minEnclosingTriangle( points, triangle );// 计算三角形的面积float area = cv::contourArea( triangle );// 绘制点集for ( const auto& pt : points ){cv::circle( image, pt, 3, cv::Scalar( 0, 0, 255 ), -1 );  // 绘制红色的小圆圈表示点}// 将 Point2f 转换为 Pointstd::vector< cv::Point > triangleInt;for ( const auto& pt : triangle ){triangleInt.push_back( cv::Point( static_cast< int >( pt.x ), static_cast< int >( pt.y ) ) );}// 将单个点向量转换为 polylines 所需的向量的向量形式std::vector< std::vector< cv::Point > > allTriangles;allTriangles.push_back( triangleInt );// 绘制最小面积三角形if ( triangle.size() == 3 ){cv::polylines( image, allTriangles, true, cv::Scalar( 0, 255, 255 ), 2 );  // 绘制黄色的三角形}// 显示图像cv::imshow( "Min Enclosing Triangle", image );cv::waitKey( 0 );// 输出三角形的面积std::cout << "Area of the enclosing triangle: " << area << std::endl;return 0;
}

运行结果

在这里插入图片描述

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

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

相关文章

【笔记】自动驾驶预测与决策规划_Part1_自动驾驶决策规划简介

自动驾驶决策规划简介 0、前言1、自动驾驶概述1.1 预测&#xff08;Prediction&#xff09;1.2 决策&#xff08;Decision Making&#xff09;1.3 规划&#xff08;Planning&#xff09; 2、自动驾驶历史和背景3、自动驾驶级别和分类4、预测决策规划的重要性4.1 预测的重要性4.…

从OracleCloudWorld和财报看Oracle的转变

2024年9月9-12日Oracle Cloud World在美国拉斯维加斯盛大开幕 押注AI和云 Oracle 创始人Larry Ellison做了对Oracle战略和未来愿景的主旨演讲&#xff0c;在演讲中Larry将AI技术和云战略推到了前所未有的高度&#xff0c;从新的Oracle 23c改名到Oracle23ai&#xff0c;到Oracl…

性能测试-jmeter脚本录制(十五)

一、jmeter脚本录制&#xff08;不推荐&#xff09;简介&#xff1a; 二、jmeter脚本录制步骤 1、添加代理服务器和线程组 2、配置http代理服务器的端口和目标线程组 3修改本机浏览器代理 4、点击启动 5、每次操作页面前&#xff0c;修改提示文字

如何删除电脑系统桌面文件右键菜单多余选项

你可能会遇到以下情况&#xff0c;电脑鼠标右键有较多无用的菜单选项&#xff0c;或者安装某个程序卸载后&#xff0c;右键菜单仍有相关的选项。下面小编就来和大家分享电脑桌面右键菜多余选项删除方法&#xff0c;适用于win7、win10、win11等windows系统。 举例说明&#xff…

NVIDIA AI Workbench 让 Windows 上的 GPU 使用更加简便

NVIDIA AI Workbench 是一款免费的、用户友好型开发环境管理器&#xff0c;可在您选择的系统&#xff08;PC、工作站、数据中心或云&#xff09;上简化数据科学、ML 和 AI 项目。在 Windows、macOS 和 Ubuntu 上&#xff0c;您可以本地开发、测试项目和构建项目原型&#xff0c…

vue2实践:el-table实现由用户自己添加删除行数的动态表格

需求 项目中需要提供一个动态表单&#xff0c;如图&#xff1a; 当我点击添加时&#xff0c;便添加一行&#xff1b;点击右边的删除时&#xff0c;便删除这一行。 至少要有一行数据&#xff0c;但是没有上限。 思路 这种每一行的数据固定&#xff0c;但是不定行数的&#x…

信刻光盘安全隔离与信息交换系统

随着各种数据传输、储存技术、信息技术的快速发展&#xff0c;保护信息安全是重中之重。军工、政府、部队及企事业单位等利用A网与B网开展相关工作已成为不可逆转的趋势。针对于业务需要与保密规范相关要求&#xff0c;涉及重要秘密信息&#xff0c;需做到安全的物理隔离&#…

PHP实时统计结果秒出高效能在线投票工具系统小程序源码

实时统计&#xff0c;结果秒出 —— 体验高效能在线投票工具系统 &#x1f680; 投票新纪元&#xff0c;效率为王&#xff01; 在这个快节奏的时代&#xff0c;每一秒都至关重要。你是否厌倦了传统投票方式中漫长的等待和繁琐的统计过程&#xff1f;那么&#xff0c;就让我带你…

数字乡村网络文化服务平台建设方案

1. 平台建设背景与目标 数字乡村网络文化服务平台的建设旨在通过数字化手段整合乡村内外资源&#xff0c;打造全面覆盖、精准服务的乡村服务体系&#xff0c;以改善民生和促进社会稳定。平台包括居民管理、互动交流、服务管理等五大应用&#xff0c;实现乡村服务的多元化、精确…

Mac在Python项目中通过opencv模版匹配定位不到图片

起因 原本一行代码的事情&#xff0c;但是在Mac上总能出现意外&#xff0c;如下 box pyautogui.locateOnScreen(obsidian.png) print(box) pyautogui.moveTo(box[0],box[1])上面的代码用来定位图片在屏幕中的位置&#xff0c;然后移动鼠标到定位到的屏幕位置坐标。 意外…

实战OpenCV之像素操作

基础入门 在OpenCV中&#xff0c;像素是最基本的操作单位。图像可以视为一个三维数组&#xff0c;其中第三维表示颜色通道。图像数据在内存中以连续或几乎连续的方式存储&#xff0c;对于多通道图像&#xff08;比如&#xff1a;BGR图像&#xff09;&#xff0c;每个像素的各通…

EmguCV学习笔记 VB.Net 11.5 目标检测

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

初识时序数据库InfluxDB

最近项目开发中,需要记录时间序列的日志信息,InfluxDB 刚好契合。于是准备研究一下,发现已经有整理很好的文档,以下两篇觉得很好,入门开发可以参考一下。 因为项目是用C#开发的,因此,简单介绍一下C#开发中,InfluxDB的API使用。 1.简介 InfluxDB是一个由InfluxData开发…

《食品安全导刊》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《食品安全导刊》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《食品安全导刊》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a; 中国商业联合会 主办单…

ONLYOFFICE8.0部署集成(vue+java)并配置存储为minio

文章目录 前言一、使用docker安装onlyoffice8安装使用DockerDesktop方式命令行方式使用 HTTPS 运行展示 二、项目集成前端集成-vue3html方式后端集成-java 三、onlyoffice基础原理四、配置存储为minio1.onlyoffice配置文件挂载问题2.配置存储为minio3.验证切换minio存储是否生效…

生成式AI介绍

生成式AI介绍 生成式AI&#xff08;Generative AI&#xff09;是人工智能领域的一种技术&#xff0c;能够通过学习现有数据来生成新的内容。不同于传统的人工智能模型只进行分类、回归等分析任务&#xff0c;生成式AI具备创作能力&#xff0c;能够生成文本、图像、音频甚至视频…

基于spring拦截器实现博客项目的强制登录功能(四)

6. 强制登录 当⽤⼾访问 博客列表和博客详情⻚ 时, 如果⽤⼾当前尚未登陆, 就⾃动跳转到登陆⻚⾯. 我们可以采⽤拦截器来完成, token通常由前端放在header中, 我们从header中获取token, 并校验 token是否合法 6.1 添加拦截器 package com.example.spring_blog_24_9_8.config;…

性能测试-jmeter的控制器(十六)

一、if控制器 需求&#xff1a;使用“用户自定义变量”定义name变量&#xff0c;值可以是“baidu”或“itcast”,使用变量值&#xff0c;控制是否访问对应网站。 1、步骤&#xff1a; 在测试计划中添加用户定义的变量name,取值可为baidu或itcast添加两个http请求&#xff1a…

misc音频隐写

一、MP3隐写 &#xff08;1&#xff09;题解&#xff1a;下载附件之后是一个mp3的音频文件&#xff1b;并且题目提示keysyclovergeek;所以直接使用MP3stego对音频文件进行解密&#xff1b;mp3stego工具是音频数据分析与隐写工具 &#xff08;2)mp3stego工具的使用&#xff1a;…