当前位置:网站首页>opencv 判断点在多边形内外
opencv 判断点在多边形内外
2022-07-05 22:17:00 【alex1801】
基于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图像:

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)结果:

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专栏
边栏推荐
- MySQL disconnection reports an error MySQL ldb_ exceptions. OperationalError 4031, The client was disconnected by the server
- Interprocess communication in the "Chris Richardson microservice series" microservice architecture
- Dbeaver executes multiple insert into error processing at the same time
- What changes has Web3 brought to the Internet?
- Interview questions for famous enterprises: Coins represent a given value
- 700. Search in a Binary Search Tree. Sol
- Serializability of concurrent scheduling
- What about data leakage? " Watson k'7 moves to eliminate security threats
- 数据泄露怎么办?'华生·K'7招消灭安全威胁
- boundary IoU 的计算方式
猜你喜欢

Advantages and disadvantages of the "Chris Richardson microservice series" microservice architecture

Reptile practice

Nacos 的安装与服务的注册

多家呼吸机巨头产品近期被一级召回 呼吸机市场仍在增量竞争

Promql demo service

Implementation technology of recovery

2022-07-05: given an array, you want to query the maximum value in any range at any time. If it is only established according to the initial array and has not been modified in the future, the RMQ meth

Common interview questions of redis factory

Solutions for unexplained downtime of MySQL services

Pl/sql basic case
随机推荐
Unique occurrence times of leetcode simple questions
[agc009e] eternal average - conclusion, DP
等到产业互联网时代真正发展成熟,我们将会看待一系列的新产业巨头的出现
如何开发引入小程序插件
如何向mongoDB中添加新的字段附代码(全)
Stored procedures and stored functions
Metaverse Ape获Negentropy Capital种子轮融资350万美元
Dbeaver executes multiple insert into error processing at the same time
Common interview questions of redis factory
How to quickly experience oneos
Talking about MySQL index
Overriding equals() & hashCode() in sub classes … considering super fields
MySQL服务莫名宕机的解决方案
Implementation technology of recovery
Depth first DFS and breadth first BFS -- traversing adjacency tables
ESP32 hosted
Installation of VMware Workstation
Pl/sql basic syntax
Sentinel production environment practice (I)
Multiplexing of Oracle control files