当前位置:网站首页>[200 opencv routines] 216 Draw polylines and polygons
[200 opencv routines] 216 Draw polylines and polygons
2022-07-01 15:40:00 【Xiaobai youcans】
Column address :『youcans Of OpenCV routine 200 piece 』
List of articles :『youcans Of OpenCV routine 200 piece - General catalogue 』
【youcans Of OpenCV routine 200 piece 】216. Draw polylines and polygons
function cv.polylines() Used to draw polygonal curves or polylines .
function cv.fillPoly() Used to draw one or more filled polygon areas .
function cv.fillConvexPoly() Used to draw a filled convex polygon .
The function prototype :
cv.polylines(img, pts, isClosed, color[, thickness=1, lineType=LINE_8, shift=0]) → img
cv.fillPoly(img, pts, color[, lineType=LINE_8, shift=0, offset=Point()]) → img
cv.fillConvexPoly(img, points, color[, lineType=LINE_8, shift=0]) → img
Parameter description :
- img: Input / output image , Allows single channel grayscale images or multi-channel color images
- pts: Polygon vertex coordinates , A two-dimensional Numpy List of arrays
- points: Polygon vertex coordinates , A two-dimensional Numpy Array
- isClosed: Closing sign ,True Represents a closed polygon ,False Indicates that the polygon is not closed
matters needing attention :
Pay special attention to polygon vertex coordinates pts The format of :
pts It's a list , The elements in the list are two-dimensional Numpy Array , Each element represents a set of vertex coordinates .
A two-dimensional Numpy The shape of the array is (m,2), Each row represents the coordinates of a vertex of the polygon (xi,yi), The data format should be integer .for example :
points1 = np.array([[200,100], [295,169], [259,281], [141,281], [105,169]], np.int) points2 = np.array([[200,400], [259,581], [105,469], [295,469], [141,581]])points1、points2 It's in the shape of (m,2) Two dimensions of Numpy Array .
For the function cv.fillConvexPoly, Use 2D Numpy Array points1 or points2 As a parameter .
For the function cv.polylines And cv.fillPoly, You can't directly put two dimensions Numpy Array points1 or points2 As a function parameter , Instead, use it as an element of the list , Such as : [points1]、[points2] or [points1, points2].function cv.polylines And cv.fillPoly You can draw or fill one or more polygons .
When the list pts There is only one element in , It's a two-dimensional Numpy Array time , Draw a polygon ;
When the list pts There are multiple elements in , That is, multiple two-dimensional Numpy Array time , Draw multiple polygons , Each two-dimensional Numpy The vertex coordinates in the array are treated as a polygon .The closing sign is True Draw a closed polygon , The line segment from the last vertex to the first vertex will be drawn ; The closing sign is False Draw a non closed polyline , There is no connection between the last vertex and the first vertex .
function cv.fillPoly And cv.fillConvexPoly You can draw filled polygons .
cv.fillConvexPoly Running speed ratio of cv.fillPoly Much faster , Especially suitable for filling convex polygons , Often used for contour processing .function cv.fillConvexPoly It can not only fill convex polygons , You can also fill any monotonic polygon that does not intersect itself , That is, the polygon whose contour intersects each horizontal line at most twice ( Although its top and / Or the bottom edge may be horizontal ).
This sentence comes from the official document , The contents in brackets “ Top and / Or the bottom edge may be horizontal ” Not easy to understand , You can combine routines 4.7 The bottom right figure understands . The author suggests that in addition to contour processing , Try not to use cv.fillConvexPoly To fill non convex polygons .
routine A4.7: Draw polylines and polygons
# A4.7 Draw polylines and polygons
img = np.ones((980, 400, 3), np.uint8)*224
img1 = img.copy()
img2 = img.copy()
img3 = img.copy()
img4 = img.copy()
# Polygon vertices
points1 = np.array([[200,100], [295,169], [259,281], [141,281], [105,169]], np.int)
points2 = np.array([[200,400], [259,581], [105,469], [295,469], [141,581]]) # (5,2)
points3 = np.array([[200,700], [222,769], [295,769], [236,812], [259,881],
[200,838], [141,881], [164,812], [105,769], [178,769]])
print(points1.shape, points2.shape, points3.shape) # (5, 2) (5, 2) (10, 2)
# Draw polygon , Closed curve
pts1 = [points1] # pts1 Is a list of , The shape of the list element is (m,2) Of numpy Two dimensional array
cv.polylines(img1, pts1, True, (0,0,255)) # pts1 Is a list of
cv.polylines(img1, [points2, points3], 1, 255, 2) # You can draw multiple polygons
# Draw a polyline , The curve is not closed
cv.polylines(img2, [points1], False, (0,0,255))
cv.polylines(img2, [points2, points3], 0, 255, 2) # You can draw multiple polylines
# Draw filled polygons , Pay attention to the treatment of overlapping parts
cv.fillPoly(img3, [points1], (0,0,255))
cv.fillPoly(img3, [points2, points3], 255) # You can draw multiple filled polygons
# Draw a filled polygon , Pay attention to the overlapping part
cv.fillConvexPoly(img4, points1, (0,0,255))
cv.fillConvexPoly(img4, points2, 255) # You cannot draw polygons that have self intersections
cv.fillConvexPoly(img4, points3, 255) # You can draw concave polygons , But be careful with
plt.figure(figsize=(9, 6))
plt.subplot(141), plt.title("closed polygon"), plt.axis('off')
plt.imshow(cv.cvtColor(img1, cv.COLOR_BGR2RGB))
plt.subplot(142), plt.title("unclosed polygo"), plt.axis('off')
plt.imshow(cv.cvtColor(img2, cv.COLOR_BGR2RGB))
plt.subplot(143), plt.title("fillPoly"), plt.axis('off')
plt.imshow(cv.cvtColor(img3, cv.COLOR_BGR2RGB))
plt.subplot(144), plt.title("fillConvexPoly"), plt.axis('off')
plt.imshow(cv.cvtColor(img4, cv.COLOR_BGR2RGB))
plt.tight_layout()
plt.show()

【 At the end of this section 】
Copyright notice :
[email protected] Original works , Reprint must be marked with the original link :(https://blog.csdn.net/youcans/article/details/125468148)
Copyright 2022 youcans, XUPT
Crated:2022-6-26
Welcome to your attention 『youcans Of OpenCV routine 200 piece 』 series , Ongoing update
Welcome to your attention 『youcans Of OpenCV Learning lessons 』 series , Ongoing update
210. There are so many holes in drawing a straight line ?
211. Draw vertical rectangle
212. Draw a slanted rectangle
213. Draw a circle
214. Detailed explanation of parameters for drawing ellipse
215. Draw approximate ellipses based on polylines
216. Draw polylines and polygons
边栏推荐
- 新出生的机器狗,打滚1小时后自己掌握走路,吴恩达开山大弟子最新成果
- [Cloudera][ImpalaJDBCDriver](500164)Error initialized or created transport for authentication
- An intrusion detection model
- 张驰咨询:锂电池导入六西格玛咨询降低电池容量衰减
- [cloud trend] new wind direction in June! Cloud store hot list announced
- Survey of intrusion detection systems:techniques, datasets and challenges
- [300 + selected interview questions from big companies continued to share] big data operation and maintenance sharp knife interview question column (III)
- Is JPMorgan futures safe to open an account? What is the account opening method of JPMorgan futures company?
- 微信小程序02-轮播图实现与图片点击跳转
- Wechat applet 01 bottom navigation bar settings
猜你喜欢

Zhang Chi's class: several types and differences of Six Sigma data

三星率先投产3nm芯片,上海应届硕士生可直接落户,南开成立芯片科学中心,今日更多大新闻在此...

Intelligent operation and maintenance practice: banking business process and single transaction tracking

Phpcms background upload picture button cannot be clicked

求求你们,别再刷 Star 了!这跟“爱国”没关系!

Skywalking 6.4 distributed link tracking usage notes

Gaussdb (for MySQL):partial result cache, which accelerates the operator by caching intermediate results

Tensorflow team: we haven't been abandoned

Short Wei Lai grizzly, to "touch China" in the concept of stocks for a living?

MySQL service is starting. MySQL service cannot be started. Solution
随机推荐
SAP s/4hana: one code line, many choices
The newly born robot dog can walk by himself after rolling for an hour. The latest achievement of Wu Enda's eldest disciple
Hardware design guide for s32k1xx microcontroller
【显存优化】深度学习显存优化方法
k8s部署redis哨兵的实现
MySQL service is starting. MySQL service cannot be started. Solution
精益六西格玛项目辅导咨询:集中辅导和点对点辅导两种方式
Research on manually triggering automatic decision of SAP CRM organization model with ABAP code
MySQL advanced 4
Wechat applet 01 bottom navigation bar settings
Deep operator overloading (2)
Intelligent operation and maintenance practice: banking business process and single transaction tracking
二叉树的前序,中序,后续(非递归版本)
新出生的机器狗,打滚1小时后自己掌握走路,吴恩达开山大弟子最新成果
【ROS进阶篇】第五讲 ROS中的TF坐标变换
Junda technology indoor air environment monitoring terminal PM2.5, temperature and humidity TVOC and other multi parameter monitoring
Implementation of deploying redis sentry in k8s
Beilianzhuguan joined the dragon lizard community to jointly promote carbon neutralization
Qt+pcl Chapter 6 point cloud registration ICP Series 2
《QT+PCL第六章》点云配准icp系列2