当前位置:网站首页>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专栏
边栏推荐
- 344. Reverse String. Sol
- Regular expressions and re Libraries
- 极狐公司官方澄清声明
- What if win11 is missing a DLL file? Win11 system cannot find DLL file repair method
- Learning of mall permission module
- A long's perception
- 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
- Lightweight dynamic monitorable thread pool based on configuration center - dynamictp
- Serializability of concurrent scheduling
- How to use tensorflow2 for cat and dog classification and recognition
猜你喜欢

【愚公系列】2022年7月 Go教学课程 004-Go代码注释

Business learning of mall commodity module

Stored procedures and stored functions

Dbeaver executes multiple insert into error processing at the same time

Official clarification statement of Jihu company

How to view Apache log4j 2 remote code execution vulnerability?

The statistics of leetcode simple question is the public string that has appeared once

Depth first DFS and breadth first BFS -- traversing adjacency tables

Shell script, awk condition judgment and logic comparison &||

Getting started with microservices (resttemplate, Eureka, Nacos, feign, gateway)
随机推荐
How to reverse a string fromCharCode? - How to reverse String. fromCharCode?
Granularity of blocking of concurrency control
When the industrial Internet era is truly mature, we will look at the emergence of a series of new industrial giants
Shell script, awk uses if, for process control
Type of fault
How to quickly experience oneos
Promql demo service
Business learning of mall commodity module
K210 learning notes (IV) k210 runs multiple models at the same time
Alternating merging strings of leetcode simple questions
Reptile practice
Text组件新增内容通过tag_config设置前景色、背景色
MySQL disconnection reports an error MySQL ldb_ exceptions. OperationalError 4031, The client was disconnected by the server
A number of ventilator giants' products have been recalled recently, and the ventilator market is still in incremental competition
Common interview questions of redis factory
How to add new fields to mongodb with code (all)
Talking about MySQL index
Server optimization of performance tuning methodology
【愚公系列】2022年7月 Go教学课程 003-IDE的安装和基本使用
Bitbucket installation configuration