当前位置:网站首页>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
边栏推荐
- Postman核心功能解析-参数化和测试报告
- Calculation method of boundary IOU
- 笔记本电脑蓝牙怎么用来连接耳机
- How can Bluetooth in notebook computer be used to connect headphones
- 点到直线的距离直线的交点及夹角
- Practice: fabric user certificate revocation operation process
- Nacos installation and service registration
- What if win11 is missing a DLL file? Win11 system cannot find DLL file repair method
- IIC bus realizes client device
- A substring with a length of three and different characters in the leetcode simple question
猜你喜欢
Getting started with microservices (resttemplate, Eureka, Nacos, feign, gateway)
Countdown to 92 days, the strategy for the provincial preparation of the Blue Bridge Cup is coming~
Concurrency control of performance tuning methodology
Calculation method of boundary IOU
Business learning of mall commodity module
科技云报道荣膺全球云计算大会“云鼎奖”2013-2022十周年特别贡献奖
database mirroring
What if win11 is missing a DLL file? Win11 system cannot find DLL file repair method
实战:fabric 用户证书吊销操作流程
Promql demo service
随机推荐
如何创建线程
90后测试员:“入职阿里,这一次,我决定不在跳槽了”
Analyse des risques liés aux liaisons de microservices
Evolution of large website architecture and knowledge system
Go语言学习教程(十五)
1.3 years of work experience, double non naked resignation agency face-to-face experience [already employed]
Solutions for unexplained downtime of MySQL services
Concurrency control of performance tuning methodology
Cobaltstrike builds an intranet tunnel
A long's perception
Performance monitoring of database tuning solutions
Learning of mall permission module
2022-07-05:给定一个数组,想随时查询任何范围上的最大值。 如果只是根据初始数组建立、并且以后没有修改, 那么RMQ方法比线段树方法好实现,时间复杂度O(N*logN),额外空间复杂度O(N*
What if the files on the USB flash disk cannot be deleted? Win11 unable to delete U disk file solution tutorial
FBO and RBO disappeared in webgpu
Search: Future Vision (moving sword)
航海日答题小程序之航海知识竞赛初赛
The real situation of programmers
GWT module may need to be (RE) compiled reduce - GWT module may need to be (RE) compiled reduce
Leetcode simple question: find the nearest point with the same X or Y coordinate