当前位置: 首页 > 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)
http://www.lryc.cn/news/438561.html

相关文章:

  • P5425 [USACO19OPEN] I Would Walk 500 Miles G
  • Java高级Day41-反射入门
  • 在Linux系统上使用Docker部署java项目
  • 【C++】标准库IO查漏补缺
  • python简单易懂的lxml读取HTML节点及常用操作方法
  • Java | Leetcode Java题解之第406题根据身高重建队列
  • 安卓获取apk的公钥,用于申请app备案等
  • 【leetcode_python】杨辉三角
  • Parallels Desktop 20 for Mac中文版发布了?会哪些新功能
  • SpringBoot整合SSE-灵活管控连接
  • 挖矿木马-Linux
  • 【leetcode——415场周赛】——python前两题
  • 【CSS in Depth 2 精译_029】5.2 Grid 网格布局中的网格结构剖析(上)
  • ZYNQ LWIP(RAW API) TCP函数学习
  • Spring Boot,在应用程序启动后执行某些 SQL 语句
  • 【SQL】百题计划:SQL最基本的判断和查询。
  • 04_Python数据类型_列表
  • F5设备绑定EIP
  • 使用 PyCharm 新建 Python 项目详解
  • 从0开始学习 RocketMQ:分布式事务消息的实现
  • MySQL 查询数据库的数据总量
  • [C++]——vector
  • 自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)
  • 随想录笔记-二叉树练习题
  • 华雁智科前端面试题
  • 【iOS】单例模式
  • Linux | 探索 Linux 信号机制:信号的产生和自定义捕捉
  • 递归的时间复杂度分析
  • C++: 二叉树进阶面试题
  • 【HarmonyOS NEXT】实现网络图片保存到手机相册