当前位置:网站首页>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
边栏推荐
- Concurrency control of performance tuning methodology
- MySQL服务莫名宕机的解决方案
- 数据泄露怎么办?'华生·K'7招消灭安全威胁
- Getting started with microservices (resttemplate, Eureka, Nacos, feign, gateway)
- Alternating merging strings of leetcode simple questions
- 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
- Platformio create libopencm3 + FreeRTOS project
- The real situation of programmers
- 2022-07-05:给定一个数组,想随时查询任何范围上的最大值。 如果只是根据初始数组建立、并且以后没有修改, 那么RMQ方法比线段树方法好实现,时间复杂度O(N*logN),额外空间复杂度O(N*
- Nacos 的安装与服务的注册
猜你喜欢
Technology cloud report: how many hurdles does the computing power network need to cross?
Storage optimization of performance tuning methodology
Metaverse Ape猿界应邀出席2022·粤港澳大湾区元宇宙和web3.0主题峰会,分享猿界在Web3时代从技术到应用的文明进化历程
A number of ventilator giants' products have been recalled recently, and the ventilator market is still in incremental competition
Server optimization of performance tuning methodology
Business learning of mall order module
Oracle triggers
MySQL actual combat 45 lecture learning (I)
航海日答题小程序之航海知识竞赛初赛
Countdown to 92 days, the strategy for the provincial preparation of the Blue Bridge Cup is coming~
随机推荐
Common interview questions of JVM manufacturers
Create a virtual machine on VMware (system not installed)
[groovy] groovy dynamic language features (automatic type inference of function arguments in groovy | precautions for function dynamic parameters)
微服務鏈路風險分析
Oracle triggers
Shelved in TortoiseSVN- Shelve in TortoiseSVN?
database mirroring
What about data leakage? " Watson k'7 moves to eliminate security threats
Text组件新增内容通过tag_config设置前景色、背景色
CA certificate trampled pit
A number of ventilator giants' products have been recalled recently, and the ventilator market is still in incremental competition
Livelocks and deadlocks of concurrency control
Talking about MySQL index
Lightweight dynamic monitorable thread pool based on configuration center - dynamictp
Overriding equals() & hashCode() in sub classes … considering super fields
[Yugong series] go teaching course in July 2022 004 go code Notes
QT creator 7 beta release
Hcip day 16
如何向mongoDB中添加新的字段附代码(全)
[agc009e] eternal average - conclusion, DP