当前位置:网站首页>[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
边栏推荐
- Tiantou village, Guankou Town, Xiamen special agricultural products Tiantou Village special agricultural products ant new village 7.1 answer
- 使用swiper制作手机端轮播图
- 《QT+PCL第六章》点云配准icp系列5
- TensorFlow团队:我们没被抛弃
- 自动、智能、可视!深信服SSLO方案背后的八大设计
- 远程办公经验?来一场自问自答的介绍吧~ | 社区征文
- Connect the ABAP on premises system to the central inspection system for custom code migration
- Tableapi & SQL and MySQL insert data of Flink
- Wechat official account subscription message Wx open subscribe implementation and pit closure guide
- The last picture is seamlessly connected with the first picture in the swiper rotation picture
猜你喜欢

【ROS进阶篇】第五讲 ROS中的TF坐标变换

Wechat applet 03 - text is displayed from left to right, and the block elements in the line are centered
![[target tracking] |stark](/img/e2/83e9d97cfb8c49cfb8d912cfe2f858.png)
[target tracking] |stark

厦门灌口镇田头村特色农产品 甜头村特色农产品蚂蚁新村7.1答案

Photoshop plug-in HDR (II) - script development PS plug-in
Implementation of deploying redis sentry in k8s

Zhang Chi Consulting: household appliance enterprises use Six Sigma projects to reduce customers' unreasonable return cases

张驰课堂:六西格玛数据的几种类型与区别

MySQL高级篇4

【显存优化】深度学习显存优化方法
随机推荐
Redis秒杀demo
Zhang Chi Consulting: lead lithium battery into six sigma consulting to reduce battery capacity attenuation
【目标跟踪】|STARK
MySQL backup and restore single database and single table
S32K1xx 微控制器的硬件设计指南
Go zero actual combat demo (I)
Don't ask me again why MySQL hasn't left the index? For these reasons, I'll tell you all
Qt+pcl Chapter 6 point cloud registration ICP Series 5
Wechat applet 02 - Implementation of rotation map and picture click jump
《QT+PCL第六章》点云配准icp系列2
重回榜首的大众,ID依然乏力
Photoshop插件-HDR(二)-脚本开发-PS插件
有些能力,是工作中学不来的,看看这篇超过90%同行
Photoshop plug-in HDR (II) - script development PS plug-in
Summary of week 22-06-26
软件测试的可持续发展,必须要学会敲代码?
MySQL审计插件介绍
HR面试:最常见的面试问题和技巧性答复
硬件开发笔记(九): 硬件开发基本流程,制作一个USB转RS232的模块(八):创建asm1117-3.3V封装库并关联原理图元器件
ABAP-屏幕切换时,刷新上一个屏幕