如何判断点在多边形内部:OpenCV--cv2.pointPolygonTest()方法详解

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。

更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~

👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称 项目名称
1.【人脸识别与管理系统开发 2.【车牌识别与自动收费管理系统开发
3.【手势识别系统开发 4.【人脸面部活体检测系统开发
5.【图片风格快速迁移软件开发 6.【人脸表表情识别系统
7.【YOLOv8多目标识别与自动标注软件开发 8.【基于YOLOv8深度学习的行人跌倒检测系统
9.【基于YOLOv8深度学习的PCB板缺陷检测系统 10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统
11.【基于YOLOv8深度学习的安全帽目标检测系统 12.【基于YOLOv8深度学习的120种犬类检测与识别系统
13.【基于YOLOv8深度学习的路面坑洞检测系统 14.【基于YOLOv8深度学习的火焰烟雾检测系统
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统 16.【基于YOLOv8深度学习的舰船目标分类检测系统
17.【基于YOLOv8深度学习的西红柿成熟度检测系统 18.【基于YOLOv8深度学习的血细胞检测与计数系统
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统 20.【基于YOLOv8深度学习的水稻害虫检测与识别系统
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统 22.【基于YOLOv8深度学习的路面标志线检测与识别系统
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统 24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统 26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统
27.【基于YOLOv8深度学习的人脸面部表情识别系统 28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统
29.【基于YOLOv8深度学习的智能肺炎诊断系统 30.【基于YOLOv8深度学习的葡萄簇目标检测系统
31.【基于YOLOv8深度学习的100种中草药智能识别系统 32.【基于YOLOv8深度学习的102种花卉智能识别系统
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统 34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统 36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统 38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统 40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统 42.【基于YOLOv8深度学习的无人机视角地面物体检测系统
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统 44.【基于YOLOv8深度学习的野外火焰烟雾检测系统
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统 46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统 48.【车辆检测追踪与流量计数系统
49.【行人检测追踪与双向流量计数系统 50.【基于YOLOv8深度学习的反光衣检测与预警系统

二、机器学习实战专栏【链接】 ,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

问题描述

如何判断一个点是在多边形的内部还是在多边形外面?本文直接使用opencv提供的cv2.pointPolygonTest()函数进行判断。下面对该函数进行详细说明,并给出具体示例。

cv2.pointPolygonTest()函数使用说明

代码示例:

python 复制代码
result = cv2.pointPolygonTest(contour, test_point, measureDist) 

参数说明

contour参数:某一轮廓点的列表,如:polygon = np.array([[10, 10], [100, 10], [100, 100], [10, 100]], dtype=np.int32)

test_point参数:像素点坐标(x,y)

measureDist参数:如果measureDist为True则输出该像素点到轮廓最近距离。当measureDist设置为false时,若返回值为+1,表示点在轮廓内部,返回值为-1,表示在轮廓外部,返回值为0,表示在轮廓上。

如果我们需要判断一个点是在多边形的内部,只需要将measureDist参数设为False即可,当输出结果为正时,即可判断点在多边形的内部。示例代码如下:

python 复制代码
result = cv2.pointPolygonTest(polygon, test_point, measureDist=False)

print(result)
# 判断结果
if result > 0:
    print("点在多边形内部")
elif result == 0:
    print("点在多边形边界上")
else:
    print("点在多边形外部")

算法原理说明

多边形,随便定一个点,然后通过这个点水平划一条线,先数数看这条横线和多边形的边相交几次,(或者说先排除那些不相交的边,第一个判断条件),然后再数这条横线穿越多边形的次数是否为奇数,如果是奇数,那么该点在多边形内,如果是偶数,则在多边形外。如下图所示:

完整示例

定义点与多边形并展示

定义点与多边形

python 复制代码
# 定义多边形的顶点
polygon = np.array([[10, 10], [100, 10], [100, 100], [10, 100]], dtype=np.int32)

# 要判断的点
test_point = [50, 50]

画出多边形及点进行展示

python 复制代码
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('TkAgg')

# 定义多边形的顶点
polygon = np.array([[10, 10], [100, 10], [100, 100], [10, 100]], dtype=np.int32)

# 要判断的点
test_point = [50, 50]
# 画出点与多边形并展示
# 创建一个新的图像
fig, ax = plt.subplots()

# 绘制多边形
ax.plot(polygon[:,0], polygon[:,1], 'r-', lw=2, label='Polygon')
ax.fill(polygon[:,0], polygon[:,1], 'r', alpha=0.3)

# 绘制点
ax.plot(test_point[0], test_point[1], 'go', markersize=10, label='Test Point')

# 添加标签和轴限制
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.legend()
ax.set_xlim(0, 110)  # 设置x轴范围
ax.set_ylim(0, 110)  # 设置y轴范围

# 显示图像
plt.show()

判断点是否在多边形内部

python 复制代码
import cv2
import numpy as np

# 定义多边形的顶点
polygon = np.array([[10, 10], [100, 10], [100, 100], [10, 100]], dtype=np.int32)

# 要判断的点
test_point = [50, 50]

# 判断test_point点是否在多边形内部
# 使用pointPolygonTest函数
result = cv2.pointPolygonTest(polygon, test_point, measureDist=False)

print(result)
# 判断结果
if result > 0:
    print("点在多边形内部")
elif result == 0:
    print("点在多边形边界上")
else:
    print("点在多边形外部")

打印结果如下:


好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
更多干货内容,可关注文末G-Z-H: 【阿旭算法与机器学习】,欢迎共同学习交流

相关推荐
荔枝吻18 分钟前
【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
人工智能·git·github
Jamie2019010634 分钟前
高档宠物食品对宠物的健康益处有哪些?
大数据·人工智能
云卓SKYDROID1 小时前
无人机载重模块技术要点分析
人工智能·无人机·科普·高科技·云卓科技
云卓SKYDROID1 小时前
无人机RTK技术要点与难点分析
人工智能·无人机·科普·高科技·云卓科技
麻雀无能为力2 小时前
CAU数据挖掘 支持向量机
人工智能·支持向量机·数据挖掘·中国农业大学计算机
智能汽车人2 小时前
Robot---能打羽毛球的机器人
人工智能·机器人·强化学习
埃菲尔铁塔_CV算法2 小时前
基于 TOF 图像高频信息恢复 RGB 图像的原理、应用与实现
人工智能·深度学习·数码相机·算法·目标检测·计算机视觉
ζั͡山 ั͡有扶苏 ั͡✾2 小时前
AI辅助编程工具对比分析:Cursor、Copilot及其他主流选择
人工智能·copilot·cursor
东临碣石822 小时前
【AI论文】数学推理能否提升大型语言模型(LLM)的通用能力?——探究大型语言模型推理能力的可迁移性
人工智能·语言模型·自然语言处理
未来智慧谷3 小时前
微软医疗AI诊断系统发布 多智能体协作实现疑难病例分析
人工智能·microsoft·医疗ai