OpenCV结构分析与形状描述符(23)确定一个点是否位于多边形内的函数pointPolygonTest()的使用
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
进行点在轮廓内的测试。
该函数确定点是在轮廓内、轮廓外,还是位于一条边上(或与顶点重合)。它返回正值(内部)、负值(外部),或零值(在一条边上)。当 measureDist=false 时,返回值分别是 +1(内部)、-1(外部)和 0(在一条边上)。否则,返回值是从点到最近轮廓边的带符号距离。
下面是一个函数样本输出,其中每个图像像素都经过了轮廓测试:
函数原型
double cv::pointPolygonTest
(InputArray contour,Point2f pt,bool measureDist
)
参数
- 参数contour 输入的轮廓。
- 参数pt 要测试的点。
- 参数measureDist 如果为 true,则函数估计点到最近轮廓边缘的带符号距离。否则,函数只检查点是否在轮廓内部。
返回值
- 当 measureDist=false 时,返回值是:
- +1:如果点在轮廓内部。
- -1:如果点在轮廓外部。
- 0:如果点在轮廓的边上或与顶点重合。
- 当 measureDist=true 时,返回值是从点到最近轮廓边的带符号距离。距离为正表示点在轮廓内部,距离为负表示点在轮廓外部,距离为零表示点在轮廓边上或与顶点重合。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 创建一个空白的图像cv::Mat image = cv::Mat::zeros( 300, 300, CV_8UC3 );// 创建一个示例轮廓std::vector< cv::Point > contour;contour.push_back( cv::Point( 100, 100 ) );contour.push_back( cv::Point( 200, 100 ) );contour.push_back( cv::Point( 200, 200 ) );contour.push_back( cv::Point( 100, 200 ) );// 绘制轮廓std::vector<std::vector<cv::Point>> contours(1, contour);cv::drawContours(image, contours, 0, cv::Scalar(0, 255, 0), 2); // 在三通道图像的第一个轮廓上绘制绿色线条// 显示原始图像cv::imshow( "Original Image", image );// 创建一个掩码图像cv::Mat mask = cv::Mat::zeros( image.size(), CV_8UC1 );// 遍历每个像素并测试其位置for ( int y = 0; y < image.rows; ++y ){for ( int x = 0; x < image.cols; ++x ){cv::Point2f pixel( x, y );float result = cv::pointPolygonTest( contour, pixel, false );if ( result >= 0 ){mask.at< uchar >( y, x ) = 255; // 内部 如果点在轮廓内部,则在掩码图像上标记为白色(255)。}else{mask.at< uchar >( y, x ) = 125; // 内部}}}// 显示掩码图像cv::imshow( "Mask Image", mask );cv::waitKey( 0 );return 0;
}
运行结果
相关文章:

OpenCV结构分析与形状描述符(23)确定一个点是否位于多边形内的函数pointPolygonTest()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 进行点在轮廓内的测试。 该函数确定点是在轮廓内、轮廓外,还是位于一条边上(或与顶点重合)。它返回正值&…...

GitLab CI_CD 从入门到实战笔记
第1章 认识GitLab CI/CD 1.3 GitLab CI/CD的几个基本概念 GitLab CI/CD由以下两部分构成。 (1)运行流水线的环境。它是由GitLab Runner提供的,这是一个由GitLab开发的开源软件包,要搭建GitLab CI/CD就必须安装它,因…...

微服务实战系列之玩转Docker(十五)
前言 博主的玩转Docker系列,今天正式开启第十五篇的征程! 在过去的十四篇中,涉及的内容有知识、有原理、有工具、更有实践。当你打开每一篇文章时,均会获得一个特定主题的知识和技巧,助你在云原生的世界里,…...
本地调试spark,访问kerberos鉴权的hdfs、hive
文章目录 准备连接hive的配置申请kerberos tgt在scala项目启动本地spark本地Jupyter Notebook启动pyspark 解决在wsl下进行开发、调试时,需要连接kerberos鉴权的hdfs、hive的问题 准备连接hive的配置 core-site.xml、hdfs-site.xml、yarn-site.xml、hive-site.xml复…...

Ubuntu 安装包下载(以20版本 阿里镜像站为例子)
Ubuntu安装包下载 上一篇文章写了一些国内常用的镜像站,这篇以阿里云镜像站Ubuntu20版本为例。 https://mirrors.aliyun.com/ubuntu-releases/ 1.点击自己想要下载的版本 2.点击以amd64.iso为结尾的文件,这个是安装文件,如果是桌面端&…...

会声会影Corel VideoStudio2025旗舰版最新中文旗舰版新功能讲解及使用会声会影使用教程
会声会影Corel VideoStudio2025旗舰版一款功能丰富的视频编辑软件。具有拖放式标题、转场、覆叠和滤镜,色彩分级、动态分屏视频和新增强的遮罩创建器,超越基本编辑,实现影院级效果。优化分屏剪辑功能,简化多时间轴编辑的工作流程&…...

【人工智能】OpenAI发布GPT-o1模型:推理能力的革命性突破,这将再次刷新编程领域的格局!
在人工智能领域,推理能力的提升一直是研究者们追求的目标。就在两天前,OpenAI正式发布了其首款具有推理能力的大语言模型——o1。这款模型的推出,不仅标志着AI技术的又一次飞跃,也为开发者和用户提供了全新的工具来解决复杂问题。…...

2024年TCGA基因表达数据下载(最新版)
文章目录 前言一、如何使用TCGA数据库获取公共数据?二、使用步骤1.点击Cohort Builder2.数据筛选3. Repository4.数据下载4.1 继续选择筛选条件4.2 添加cart并进入4.3 下载 总结 前言 TCGA 全称 The Cancer Genome Atlas ,即癌症基因组图谱。它是一个大型的癌症研…...

1. 运动控制指令概要(omron 机器自动化控制器)
机器自动化控制器——第一章 运动控制指令概要 1-1 运动控制指令PLCopen运动控制用功能块运动控制指令概要▶ 运动控制指令的种类▶ 状态变化▶ 运动控制指令的启动和状态▶ 异常处理▶ 执行运动控制指令时输入变量的变更(指令重启)▶ 通过选择缓存模式执行指令多重启动▶ 通过…...
依赖注入(Dependency Injection)
依赖注入是一种设计原则,主要用于减少类之间的紧耦合度,通过将对象的选择和创建逻辑外包给一个容器来实现动态注入。 适用场景: 当需要将对象的生命周期管理和依赖关系外包给外部容器时(如Spring DI容器)。当应用程序…...
PHP环境搭建
PHP环境搭建教程 PHP 是一种流行的后端开发语言,用于构建动态网站和 Web 应用程序。在开发和部署 PHP 项目之前,您需要设置一个适当的 PHP 环境。本教程将帮助您在不同操作系统上快速搭建 PHP 环境。 1. 环境准备 1.1 操作系统 本教程将介绍在以下操作…...
小叶OJ 2716: 过河问题 ← 贪心算法
【题目来源】http://xiaoye.ac.cn/problem.php?id2716【题目描述】 有 n 个人要渡河,但只有一条小船,这条小船一次只能坐下最多两个人,并且只有一副船桨。每个人划船的速度不一样,如果两个人一起上船,由于重量变大&am…...
LeetCode509:斐波那契数列
代码如下 class Solution { public:int fib(int n) {//这个是为了特殊n,当n 0时, 当 n 1时。if(n 0) return 0;if(n 1) return 1;//第一次开dp专题,连dp数组都忘记定义了。只写了下面,哭vector<int> dp(n 1, 0);dp[…...

5G前传-介绍
1. 引用 知识分享系列一:5G基础知识-CSDN博客 5G前传的最新进展-CSDN博客 灰光和彩光_通信行业5G招标系列点评之二:一文读懂5G前传-光纤、灰光、彩光、CWDM、LWDM、MWDM...-CSDN博客 术语: 英文缩写描述BBU:Building Baseba…...

【Python机器学习】循环神经网络(RNN)——超参数
几乎所有模型都可以根据数据和样本进行调整,它们都有各自的优势和相应的利弊权衡方式。寻找最优超参数集通常是一个棘手的问题,但是人类的直觉和经验可以为我们提供解决问题的方法。比如之前的例子: #设置任意输入序列的最大长度 maxlen100 …...

【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树
在安卓源码的设计中,将将屏幕分为了37层,不同的窗口将在不同的层级中显示。 对这一块的概念以及相关源码做了详细分析,整理出以下几篇。 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树 【Android 13源码分析】WindowCon…...

Node.js的学习2——内置模块(一)
Node.js的内置模块 module模块global全局变量Console控制台Errors错误模块捕获异常异步方法通过回调函数传递异常事件触发器对象异常捕获 module模块 使用module模块可以查看Node.js所有的内置模块、在所有模块中都可以使用的全局变量、程序在运行过程中可能会出现的四类错误。…...

信息安全工程师(5)域名与域名解析
一、域名 1. 定义与功能 域名(Domain Name)是互联网上用于标识网站或服务器地址的名称,由一串由点分隔的字符组成,如“example.com”。域名的主要功能是提供一种便于记忆和输入的地址形式,以代替难以记忆的IP地址。域名…...

idear导入他人项目如何快速运行
最近idear经常导入别人的项目,结果永远在加载依赖项。网上查了一堆资料,什么jdk问题,环境变量问题,maven仓库路径问题,总之就是没啥用。那有没有什么简单粗暴的办法,能够导入项目后快速运行呢。 解决方法&a…...

直流无刷电机霍尔线序自学习解释
直流无刷电机霍尔线序自学习 步骤详解 1. 初始连接 连接电机的三相线:A、B、C。连接霍尔传感器线:HA、HB、HC。 2. 输入电压组合与霍尔信号记录 电机的电压输入组合和霍尔信号记录是电机控制系统中至关重要的一部分,它们决定了电机的运转…...
C++学习笔记(26)
七 、显示字符串中的字符 从界面上输入一个字符串(C 风格),把字符串中的每个字符显示出来,如果输入的是"abc",要求: 1)正序显示:a b c 2)逆序显示:…...

安卓14剖析SystemUI的ShadeLogger/LogBuffer日志动态控制输出dumpsy机制
背景: 看SystemUI的锁屏相关代码时候发现SystemUI有一个日志打印相关的方法调用,相比于常规的Log.i直接可以logcat查看方式还是比较新颖。 具体日志打印代码如下: 下面就来介绍一下这个ShadeLogger到底是如何打印的。 分析源码࿱…...

华为CNA VRM搭建(使用vmware worfstartion搭建)
创建虚拟机: 自定义→高级 选择硬件兼容性:默认安装版本,如果未来想要将此虚拟机安装到其他电脑,其他电脑版本过低,此时可以向下兼容,这里我们默认版本 稍后安装操作系统: CNA采用Euler OS系统…...

【WRF工具】WRF Domain Wizard第二期:使用教程
【WRF工具】WRF Domain Wizard第二期:使用教程 WRF Domain Wizard使用教程1)Wizard Option:新建区域/打开已有区域2)New Domain:新建区域3)Horizontal Editor:水平编辑器4)Namelist.…...

智能摄像头MP4格式化恢复方法
如果说生孩子扎堆,那很显然最近智能摄像头多碎片的恢复也扎堆了,这次恢复的是一个不知名的小品牌。其采用了mp4视频文件方案,不过这个案例的特殊之处在于其感染了病毒且不只一次,我们来看看这个小品牌的智能恢复头格式化的恢复方法…...

【C++】unordered系列
前言: 在C11及以后的标准中,unordered容器是标准模板库(STL)的一部分,提供了高效的数据结构选项,适用于需要快速查找和插入操作的场景。 unordered通常与关联容器一起使用,特别是unordered_map和…...

Cobbler 搭建方法
统信服务器操作系统行业版V20-1000c【Cobbler 搭建】手册 统信服务器操作系统行业版 V20版本上Cobbler 搭建方法 文章目录 功能概述一、使用范围二、cobbler工作流程1. Server 端2. Client 端三、 环境准备1. 测试环境告知,以提供配置时参考:2. 关闭防火墙、selinux:3. 注意…...

从边缘到云端,合宙DTURTU打造无缝物联网解决方案
随着物联网(IoT)技术的飞速发展,万物互联的时代已经到来, 如何高效、稳定地连接边缘设备与云端平台,实现数据的实时采集、传输与处理,成为了推动物联网应用落地的关键。 DTU(数据传输单元&…...

【Android Studio】API 29(即Android 10)或更高版本,在程序启动时检查相机权限,并在未获取该权限时请求它
文章目录 1. 在AndroidManifest.xml文件中,声明相机权限:2. 在你的Activity中(例如MainActivity)测试 1. 在AndroidManifest.xml文件中,声明相机权限: <uses-feature android:name"android.hardwar…...
【裸机装机系列】3.kali(ubuntu)-更新sources.list并重启
当装机并重启计算机后,暂时还不能使用,需要更新源并下载软件 1、更新软件源 1> 切换root使用命令 sudo su root 进入界面后,是你自己的账户,不是root账户,这里的操作是需要进入root账户进行操作的,否…...