当前位置: 首页 > news >正文

OpenCV结构分析与形状描述符(17)判断轮廓是否为凸多边形的函数isContourConvex()的使用

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

算法描述

测试轮廓的凸性。
该函数测试输入的轮廓是否为凸的。轮廓必须是简单的,即没有自相交。否则,函数的输出是不确定的。

cv::isContourConvex 函数是 OpenCV 提供的一个用于判断轮廓是否为凸多边形的函数。这个函数可以用来验证一个给定的轮廓是否是凸的,这对于后续处理(如使用 intersectConvexConvex 来寻找两个凸多边形的交集)是非常有用的。

函数原型

bool cv::isContourConvex	
(InputArray 	contour
)	

参数

  • 参数contour 输入的二维点向量,存储在 std::vector<> 或 Mat 中

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 定义两个矩形的顶点cv::Mat p1 = ( cv::Mat_< float >( 4, 2 ) << 0, 0,  // 左上角2, 0,                               // 右上角2, 2,                               // 右下角0, 2 );                             // 左下角cv::Mat p2 = ( cv::Mat_< float >( 4, 2 ) << 1, 1,  // 左上角3, 1,                               // 右上角3, 3,                               // 右下角1, 3 );                             // 左下角// 验证轮廓是否为凸多边形bool isP1Convex = cv::isContourConvex( p1 );bool isP2Convex = cv::isContourConvex( p2 );std::cout << "Polygon p1 is convex: " << std::boolalpha << isP1Convex << std::endl;std::cout << "Polygon p2 is convex: " << std::boolalpha << isP2Convex << std::endl;// 如果两个多边形都是凸的,才继续进行交集计算if ( isP1Convex && isP2Convex ){cv::Mat p12;bool intersect = cv::intersectConvexConvex( p1, p2, p12, true );if ( intersect ){std::cout << "Polygons intersect." << std::endl;std::cout << "Intersection vertices:" << std::endl;for ( int i = 0; i < p12.rows; ++i ){cv::Point2f pt = p12.at< cv::Point2f >( i );std::cout << "Vertex " << i << ": (" << pt.x << ", " << pt.y << ")" << std::endl;}}else{std::cout << "Polygons do not intersect." << std::endl;}}else{std::cout << "One or both polygons are not convex." << std::endl;}return 0;
}

运行结果

Polygon p1 is convex: true
Polygon p2 is convex: true
Polygons intersect.
Intersection vertices:
Vertex 0: (2, 1)
Vertex 1: (2, 2)
Vertex 2: (1, 2)
Vertex 3: (1, 1)

相关文章:

OpenCV结构分析与形状描述符(17)判断轮廓是否为凸多边形的函数isContourConvex()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 测试轮廓的凸性。 该函数测试输入的轮廓是否为凸的。轮廓必须是简单的&#xff0c;即没有自相交。否则&#xff0c;函数的输出是不确定的。 cv:…...

P5425 [USACO19OPEN] I Would Walk 500 Miles G

*原题链接* 很离谱的题。首先可以想到暴力连边&#xff0c;整个图为一个完全图&#xff0c;将所有的边选出来&#xff0c;然后从小到大一条条加入&#xff0c;当剩下集合数量 <K 的时候就结束。答案为加入的最后一条边的大小。如果用prim算法的话时间复杂度为。足以通过此题…...

Java高级Day41-反射入门

115.反射 反射机制 1.根据配置文件re.properties指定信息&#xff0c;创建Cat对象并调用hi方法 SuppressWarnings({"all"}) public class ReflectionQuestion {public static void main(String[] args) throws IOException {//根据配置文件 re.properties 指定信息…...

在Linux系统上使用Docker部署java项目

一.使用Docker部署的好处&#xff1a; 在Linux系统上使用Docker部署项目通常会大大简化部署流程&#xff0c;因为Docker可以将应用程序及其依赖打包到一个独立的容器中。 Docker打包应用程序时会将其与所有依赖项&#xff08;操作系统、库等&#xff09;一起打包。这样&#…...

【C++】标准库IO查漏补缺

【C】标准库 IO 查漏补缺 文章目录 系统I/O1. 概述2. cout 与 cerr3. cerr 和 clog4. 缓冲区5. 与 printf 的比较 系统I/O 1. 概述 标准库提供的 IO 接口&#xff0c;包含在 iostream 文件中 输入流: cin输出流&#xff1a;cout / cerr / clog。 输入流只有一个 cin&#x…...

python简单易懂的lxml读取HTML节点及常用操作方法

python简单易懂的lxml读取HTML节点及常用操作方法 1. 初始化和基本概念 lxml 是一个强大的pyth库&#xff0c;用于处理XML和HTML文档。它提供了类似BeautifulSoup的功能&#xff0c;但性能更高。在使用lxml时&#xff0c;通常会先解析HTML或XML文档&#xff0c;得到一个Eleme…...

Java | Leetcode Java题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, new Comparator<int[]>() {public int compare(int[] person1, int[] person2) {if (person1[0] ! person2[0]) {return person2[0] - perso…...

安卓获取apk的公钥,用于申请app备案等

要申请app的icp备案等场景&#xff0c;需要app的 证书MD5指纹和公钥&#xff0c;示例如下&#xff1a; 步骤1&#xff1a;使用keytool从APK中提取证书 1. 打开命令行&#xff0c;cd 到你的apk目录&#xff0c;如&#xff1a;app/release 2. 解压APK文件&#xff1a; unzip yo…...

【leetcode_python】杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] 方案&#…...

Parallels Desktop 20 for Mac中文版发布了?会哪些新功能

Parallels Desktop 20 for Mac 正式发布&#xff0c;完全支持 macOS Sequoia 和 Windows 11 24H2&#xff0c;并且在企业版中引入了全新的管理门户。 据介绍&#xff0c;新版本针对 Windows、macOS 和 Linux 虚拟机进行了大量更新&#xff0c;最大的亮点是全新推出的 Parallels…...

SpringBoot整合SSE-灵活管控连接

SpringBoot整合SSE(管控连接) 1、sse单向通信整成逻辑双向通信。 2、轻量级实现端对端信息互通。 3、避免繁琐配置学习。 核心点通过记录连接码和心跳检测实现伪双向通道,避免无效连接占用过多内存。 服务器推送(Server Push)技术允许网站和应用在有新内容可用时主动向用户…...

挖矿木马-Linux

目录 介绍步骤 介绍 1、挖矿木马靶机中切换至root用户执行/root目录下的start.sh和attack.sh 2、题目服务器中包含两个应用场景&#xff0c;redis服务和hpMyAdmin服务&#xff0c;黑客分别通过两场景进行入侵&#xff0c;入侵与后续利用线路路如下&#xff1a; redis服务&…...

【leetcode——415场周赛】——python前两题

3289. 数字小镇中的捣蛋鬼 数字小镇 Digitville 中&#xff0c;存在一个数字列表 nums&#xff0c;其中包含从 0 到 n - 1 的整数。每个数字本应 只出现一次&#xff0c;然而&#xff0c;有 两个 顽皮的数字额外多出现了一次&#xff0c;使得列表变得比正常情况下更长。 为了…...

【CSS in Depth 2 精译_029】5.2 Grid 网格布局中的网格结构剖析(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…...

ZYNQ LWIP(RAW API) TCP函数学习

1 LWIP TCP函数学习 tcp_new()–新建控制块 这个函数用于分配一个TCP控制块,它通过tcp_alloc()函数分配一个TCP控制块结构来存储TCP控制块的数据信息, 如果没有足够的内容分配空间,那么tcp_alloc()函数就会尝试释放一些不太重要的TCP控制块, 比如就会释放处于TIME_WAIT、C…...

Spring Boot,在应用程序启动后执行某些 SQL 语句

在 Spring Boot 中&#xff0c;如果你想在应用程序启动后执行某些 SQL 语句&#xff0c;可以利用 spring.sql.init 属性来配置初始化脚本。这通常用于在应用启动时创建数据库表、索引、视图等&#xff0c;或者填充默认数据。data-locations 和 schema-locations 指定了 SQL 脚本…...

【SQL】百题计划:SQL最基本的判断和查询。

[SQL]百题计划 Select product_id from Products where low_fats "Y" and recyclable "Y";...

04_Python数据类型_列表

Python的基础数据类型 数值类型&#xff1a;整数、浮点数、复数、布尔字符串容器类型&#xff1a;列表、元祖、字典、集合 列表 列表&#xff08;List&#xff09;是一种非常灵活的数据类型&#xff0c;它可以用来存储一系列的元素。容器类型&#xff0c;能够存储多个元素的…...

F5设备绑定EIP

公网IP 公网IP&#xff08;Public IP Address&#xff09;是指可以直接在互联网上访问的IP地址&#xff0c;用于标识网络上的设备或主机。它允许外部网络访问您的云服务器&#xff0c;如提供远程登录服务、访问Web服务器等。然而&#xff0c;这并不意味着公网IP不需要路由。 …...

使用 PyCharm 新建 Python 项目详解

使用 PyCharm 新建 Python 项目详解 文章目录 使用 PyCharm 新建 Python 项目详解一 新建 Python 项目二 配置环境1 项目存放目录2 Python Interpreter 选择3 创建隔离环境4 选择你的 Python 版本5 选择 Conda executable 三 New Window 打开项目四 目录结构五 程序编写运行六 …...

告别付费IP!手把手教你用ZCU102 PS端DP接口点亮显示器(附参数调试心得)

解锁ZCU102 PS端DisplayPort潜力&#xff1a;零成本实现高效显示输出的实战指南 在嵌入式视觉系统开发中&#xff0c;显示输出往往是项目落地的最后一道关卡。当我在多个Zynq UltraScale MPSoC项目中反复遭遇HDMI IP核的授权困扰和PL端实现的复杂性后&#xff0c;意外发现PS端集…...

OneMore插件终极指南:160+功能免费解锁OneNote完整生产力

OneMore插件终极指南&#xff1a;160功能免费解锁OneNote完整生产力 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore OneMore是一款功能强大的OneNote免费开源插件&…...

FlexASIO:打破专业音频门槛,让普通设备也能拥有专业级ASIO体验

FlexASIO&#xff1a;打破专业音频门槛&#xff0c;让普通设备也能拥有专业级ASIO体验 【免费下载链接】FlexASIO A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME. 项目地址…...

OLED多级菜单移植与设计实战

1. 低成本嵌入式项目的OLED多级菜单设计 第一次接触OLED多级菜单是在一个智能温控器的DIY项目里。当时为了给设备做个简单的交互界面&#xff0c;我试过各种方案&#xff0c;最后发现0.96寸的OLED屏配上多级菜单是最经济实惠的选择。这种组合特别适合预算有限但又需要基本人机交…...

FreeRTOS进阶:任务优先级与调度策略深度解析

1. FreeRTOS任务优先级基础 在嵌入式实时操作系统中&#xff0c;任务优先级决定了任务执行的先后顺序。FreeRTOS采用数值越大优先级越高的设计&#xff0c;优先级范围通常为0到(configMAX_PRIORITIES-1)。我刚开始接触FreeRTOS时&#xff0c;经常混淆这个概念&#xff0c;直到在…...

Thorium浏览器:重新定义Chromium性能与隐私体验的开源解决方案

Thorium浏览器&#xff1a;重新定义Chromium性能与隐私体验的开源解决方案 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Windows and MacOS/Raspi/Android/Special builds are in different repositories, links are towards the top of t…...

Emacs verilog-mode实战:5分钟搞定AUTOARG自动参数生成(附避坑指南)

Emacs verilog-mode实战&#xff1a;5分钟掌握AUTOARG高效参数生成技巧 在数字电路设计领域&#xff0c;Verilog作为主流硬件描述语言&#xff0c;其模块化开发方式虽然提高了代码复用性&#xff0c;却也带来了大量重复性工作。模块接口定义中的参数列表维护就是典型痛点——每…...

PHP PhantomJS 安装与使用指南

PHP PhantomJS 安装与使用指南 【免费下载链接】php-phantomjs Execute PhantomJS commands through PHP 项目地址: https://gitcode.com/gh_mirrors/ph/php-phantomjs 1. 项目目录结构及介绍 在安装jonnnnyw/php-phantomjs库后&#xff0c;您将得到一个基本的目录结构…...

LeetCode 热题 100 之 131. 分割回文串 51. N 皇后

131. 分割回文串 51. N 皇后 131. 分割回文串 class Solution {public List<List<String>> partition(String s) {List<List<String>> res new ArrayList<>();List<String> path new ArrayList<>();backtrack(s, 0, path, res);re…...

cv_unet_image-colorization音乐史料处理:黑白乐谱AI上色与音符语义关联增强

cv_unet_image-colorization音乐史料处理&#xff1a;黑白乐谱AI上色与音符语义关联增强 1. 引言&#xff1a;当黑白乐谱遇见AI色彩 想象一下&#xff0c;你是一位音乐史研究者&#xff0c;面前摊开一本泛黄的、只有黑白线条的19世纪乐谱手稿。那些音符、标记、作曲家的笔迹&…...