当前位置:网站首页>Opencv judgment points are inside and outside the polygon
Opencv judgment points are inside and outside the polygon
2022-07-05 22:19:00 【alex1801】
be based on Python and OpenCV Draw a polygon , And judge whether a point is in the polygon .
1、cv2.pointPolygonTest() function
Function definition :cv2.pointPolygonTest(contour, pt, measureDist)
The functionality : Find the shortest distance between the point and the contour in the image . The distance it returns is negative when the point is outside the contour , When the point is positive in the contour , If it is 0.
among ,contour Is a contour polygon ;pt It's a coordinate point ;measureDist, if True, Is to find the signed distance ; if False, I will find out whether it is included , Outside , Or contour ( Corresponding return +1, -1, 0).
The test case :
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) # External point , Red
pt1 = (166, 157) # Points on the outline
pt2 = (260, 170) # Inside point
img = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
img = cv2.circle(img, pt0, 2, (0, 0, 255), 2) # Red
img = cv2.circle(img, pt1, 2, (0, 255, 0), 2) # green
img = cv2.circle(img, pt2, 2, (255, 0, 0), 2) # Blue
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)
test result :
dst: -58.52 2.82 44.28
Images :
2、cv2.polylines() function
Function definition :img = cv2.polylines(img, pts, isClosed, color, thickness, lineType, shift)
among :
pts It is a matrix composed of polygon fixed points , Connect the incoming points once .
isClosed - Indicates whether the drawn polygon is closed . If closed (True), Then the last vertex of each curve is connected to the first vertex , If not closed (False), Then the polygon is not closed .
Sample code :
import cv2
import numpy as np
# Pure white image
img = np.zeros((500, 500, 3), np.uint8)
img[:] = [255, 255, 255]
# Four vertex coordinates
pts = np.array([[100, 100], [200, 20], [370, 6], [450, 200]], np.int32)
# Number of vertices :4, Matrix becomes 4*1*2 dimension
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)
result :
3、 Key code
# Four vertex coordinates
pts = np.array([[100, 100], [200, 20], [370, 6], [450, 200]], np.int32)
# Number of vertices :4, Matrix becomes 4*1*2 dimension
pts = pts.reshape((-1, 1, 2)) # (4,1,2)
# Draw a polygon
img = cv2.polylines(img, [pts], isClosed=True, color=(0, 0, 255), thickness=3)
# Test the distance between the point and the polygon
dist = cv2.pointPolygonTest(pts, (307, 100), True)
Extended reading :
1、opencv python outline / Convex defect /PointPolygonTest/ Shape match
opencv python outline / Convex defect /PointPolygonTest/ Shape match - SegmentFault Think no
Shape match :
OpenCV With a function cv2.matchShapes(), It allows us to compare two shapes or two outlines , And return a measure that shows similarity . The lower the result , The better the match . It is based on hu-moment Calculated by value .
ret = cv2.matchShapes(cnt1,cnt2,1,0.0)
2、 Better than opencv special column
边栏推荐
- MySQL disconnection reports an error MySQL ldb_ exceptions. OperationalError 4031, The client was disconnected by the server
- Nacos 的安装与服务的注册
- 344. Reverse String. Sol
- Oracle hint understanding
- Assign the output of a command to a variable [repeat] - assigning the output of a command to a variable [duplicate]
- Win11运行cmd提示“请求的操作需要提升”的解决方法
- 等到产业互联网时代真正发展成熟,我们将会看待一系列的新产业巨头的出现
- Postman核心功能解析-参数化和测试报告
- The difference between MVVM and MVC
- Evolution of large website architecture and knowledge system
猜你喜欢
Sentinel production environment practice (I)
Depth first DFS and breadth first BFS -- traversing adjacency tables
boundary IoU 的计算方式
Advantages and disadvantages of the "Chris Richardson microservice series" microservice architecture
Recovery technology with checkpoints
K210 learning notes (IV) k210 runs multiple models at the same time
The American Championship is about to start. Are you ready?
database mirroring
Practice: fabric user certificate revocation operation process
Analysis of the problem that the cookie value in PHP contains a plus sign (+) and becomes a space
随机推荐
U盘的文件无法删除文件怎么办?Win11无法删除U盘文件解决教程
Assign the output of a command to a variable [repeat] - assigning the output of a command to a variable [duplicate]
Oracle views the data size of a table
Stored procedures and stored functions
Draw a red lantern with MATLAB
Basic grammar of interview (Part 1)
Qtquick3d real time reflection
Oracle is sorted by creation time. If the creation time is empty, the record is placed last
2022软件测试工程师涨薪攻略,3年如何达到30K
Blocking protocol for concurrency control
344. Reverse String. Sol
boundary IoU 的计算方式
Summary of concurrency control
Database recovery strategy
Common interview questions of JVM manufacturers
元宇宙中的三大“派系”
Matlab draws a cute fat doll
Leetcode simple question: find the nearest point with the same X or Y coordinate
Oracle hint understanding
Lightweight dynamic monitorable thread pool based on configuration center - dynamictp