opencv 判断点在多边形内外

这篇具有很好参考价值的文章主要介绍了opencv 判断点在多边形内外。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        基于Python 和 OpenCV 画出多边形,以及判断某个点是不是在多边形内。

1、cv2.pointPolygonTest() 函数

        函数定义:cv2.pointPolygonTest(contour, pt, measureDist)

        函数功能:找到图像里的点和轮廓之间的最短距离. 它返回的距离当点在轮廓外的时候是负值,当点在轮廓内是正值,如果在轮廓上是0。

        其中,contour 为轮廓多边形;pt 为坐标点;measureDist, 若为True,是找带符号的距离;若为False,会找点是否在内,外,或轮廓上(相应返回+1, -1, 0)。

测试用例:

import cv2

mask = cv2.imread(r"mask.jpg", 0)
mask[mask > 100] = 255
mask[mask != 255] = 0

cnts, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
print("mask info:", mask.shape, len(cnts))

pt0 = (131, 104)  # 外点, 红色
pt1 = (166, 157)  # 轮廓上的点
pt2 = (260, 170)  # 内点
img = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
img = cv2.circle(img, pt0, 2, (0, 0, 255), 2)  # 红色
img = cv2.circle(img, pt1, 2, (0, 255, 0), 2)  # 绿色
img = cv2.circle(img, pt2, 2, (255, 0, 0), 2)  # 蓝色

dst0 = cv2.pointPolygonTest(cnts[0], pt0, 1)
dst1 = cv2.pointPolygonTest(cnts[0], pt1, 1)
dst2 = cv2.pointPolygonTest(cnts[0], pt2, 1)
print("dst:", dst0, dst1, dst2)
cv2.imwrite(r"ret.jpg", img)

测试结果:

dst: -58.52 2.82 44.28

图像:

cv2.pointpolygontest,图像处理,opencv,计算机视觉,python,人工智能,深度学习

2、cv2.polylines() 函数

函数定义:img = cv2.polylines(img, pts, isClosed, color, thickness, lineType, shift)

其中:

        pts 是多边形定点构成的矩阵,将传入的点一次连接。

        isClosed - 表示绘制的多边形是否闭合. 如闭合(True),则每个曲线的最后一个顶点到第一个顶点是连接的,若不闭合(False),则多边形就不闭合。

示例代码:

import cv2
import numpy as np

# 纯白图像
img = np.zeros((500, 500, 3), np.uint8)
img[:] = [255, 255, 255]

# 四个顶点坐标
pts = np.array([[100, 100], [200, 20], [370, 6], [450, 200]], np.int32)
# 顶点个数:4,矩阵变成4*1*2维
pts = pts.reshape((-1, 1, 2))  # (4,1,2)
cv2.polylines(img, [pts], isClosed=True, color=(0, 0, 255), thickness=3)
cv2.imwrite(r"a.jpg", img)

结果:

cv2.pointpolygontest,图像处理,opencv,计算机视觉,python,人工智能,深度学习

3、关键代码

# 四个顶点坐标
pts = np.array([[100, 100], [200, 20], [370, 6], [450, 200]], np.int32)

# 顶点个数:4,矩阵变成4*1*2维
pts = pts.reshape((-1, 1, 2))  # (4,1,2)

# 画多边形
img = cv2.polylines(img, [pts], isClosed=True, color=(0, 0, 255), thickness=3)

# 测试点与多边形的距离
dist = cv2.pointPolygonTest(pts, (307, 100), True)

扩展阅读:

1、opencv python 轮廓/凸缺陷/PointPolygonTest/形状匹配

opencv python 轮廓/凸缺陷/PointPolygonTest/形状匹配 - SegmentFault 思否

        形状匹配:

        OpenCV附带了一个函数cv2.matchShapes(),它使我们能够比较两个形状或两个轮廓,并返回一个显示相似性的度量。 结果越低,匹配就越好.它是根据hu-moment值计算的。

        ret = cv2.matchShapes(cnt1,cnt2,1,0.0)

2、比好好的opencv专栏

https://blog.csdn.net/kakiebu/category_7398390.html文章来源地址https://www.toymoban.com/news/detail-651693.html

到了这里,关于opencv 判断点在多边形内外的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • cv2.approxPolyDP()函数的输出,为近似多边形的顶点坐标

    原始图像为 经过轮廓检测,输出的Value值为cnt,类型为list,元素个数为11,即包含11个轮廓  c0为在cnt中索引为0,代表第一轮廓,即三角形轮廓    下面进行轮廓近似 cv2.apaproxPloyDP函数输出的approx,元素个数为3,即三角形三个顶点    

    2024年02月15日
    浏览(54)
  • OpenCV-Python学习(13)—— OpenCV 多边形填充与绘制(cv.fillPoly、cv.polylines)

    1. 知识点 学习 cv.polylines 函数的使用; 学习 cv.fillPoly 函数的使用。 2. 绘制折线或多边形 cv.polylines 函数说明 2.1 函数使用 2.2 参数说明 参数 说明 img 表示要在其上绘制矩形的图像的img对象。 pts 表示一个或多个点集。 isClosed 表示标志,决定所绘制的多边形是否闭合。若为 T

    2024年02月16日
    浏览(58)
  • 【OpenCV 例程 300篇】223. 特征提取之多边形拟合(cv.approxPolyDP)

    『youcans 的 OpenCV 例程200篇 - 总目录』 目标特征的基本概念 通过图像分割获得多个区域,得到区域内的像素集合或区域边界像素集合。我们把感兴趣的人或物称为目标,目标所处的区域就是目标区域。 特征通常是针对于图像中的某个目标而言的。图像分割之后,还要对目标区

    2024年02月04日
    浏览(51)
  • 如何判断两个多边形是否相交?——多边形相交判定算法详解

    如何判断两个多边形是否相交?——多边形相交判定算法详解 在计算机图形学中,判断两个多边形是否相交是一项很重要的任务。这涉及到各种应用场景,如碰撞检测、模拟物理效果等。在本篇文章中,我们将会介绍多边形相交判定算法的相关知识和实现方式。 首先,我们

    2024年02月14日
    浏览(67)
  • 【计算几何】判断多边形边界顺逆时针 & C++代码实现

    多边形可以由一个点集 { v 1 , v 2 , . . . , v n } {v_1,v_2,...,v_n} { v 1 ​ , v 2 ​ , ... , v n ​ } 表示,构成多边形的点集确定,多边形边界的顺序也就确定了 有关多边形边界的顺序的示意图,如下图所示: 有时候关于数据格式有规定,要求多边形边界必须为顺时针或者逆时针。 因

    2024年02月07日
    浏览(59)
  • opencv 之 外接多边形(矩形、圆、三角形、椭圆、多边形)使用详解

    本文主要讲述opencv中的外接多边形的使用: 多边形近似 外接矩形、最小外接矩形 最小外接圆 外接三角形 椭圆拟合 凸包 将重点讲述最小外接矩形的使用 给一个opencv官方的例程: 过程图像如下: 椭圆拟合一般用于轮廓提取之后: 凸包绘制 计算两个旋转矩形交集: C++版的最

    2024年02月09日
    浏览(103)
  • 如何判断一个点是否在凸多边形内 - golang

    判断一个点是否在凸多边形内的方法很多,此处仅给出使用 向量叉积法 判断点是否在凸多边形内的方法。 以下图为例说明问题: 原理: 1. 将多边形的第 i 条边的第一个顶点指向点 P 得到向量 v1,然后将从第一个顶点指向第二个顶点得到向量 v2,叉乘这两个向量。 2. 如果叉

    2024年02月07日
    浏览(52)
  • 基于C++ 的OpenCV绘制多边形,多边形多条边用不用的颜色绘制

    使用基于C++的OpenCV库来绘制多边形,并且为多边形的不同边使用不同的颜色,可以按照以下步骤进行操作: 首先,确保你已经安装了OpenCV库并配置好了你的开发环境。 导入必要的头文件: 创建一个空白的图像,然后绘制多边形,并为每条边选择不同的颜色: 在这个示例中,

    2024年02月13日
    浏览(57)
  • Python:opencv画点、圆、线、多边形、矩形

    简介 :机器学习视觉方向一般都需要在图像中添加标注框,标注框有着很大的用处,特别是对图像中某些需要关注的特征起到圈定的效果,方便对特征选择进行处理。 相关攻略: 机器学习:基本流程 Python:调用摄像头使用cv2库录制视频 Python:视频拆分成一帧一帧的图片

    2024年02月04日
    浏览(92)
  • python opencv 绘制矩形、圆、线、多边形

    👨‍💻 个人简介: 深度学习图像领域工作者 🎉 总结链接:              链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:                     📌 1.工作中常用深度学习脚本                     📌 2.to

    2024年02月03日
    浏览(123)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包