当前位置:网站首页>[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
边栏推荐
- Redis high availability principle
- Survey of intrusion detection systems:techniques, datasets and challenges
- How to realize clock signal frequency division?
- 【Pygame实战】你说神奇不神奇?吃豆人+切水果结合出一款你没玩过的新游戏!(附源码)
- Returning to the top of the list, the ID is still weak
- 《QT+PCL第六章》点云配准icp系列4
- Beilianzhuguan joined the dragon lizard community to jointly promote carbon neutralization
- Junda technology indoor air environment monitoring terminal PM2.5, temperature and humidity TVOC and other multi parameter monitoring
- SAP S/4HANA: 一条代码线,许多种选择
- k8s部署redis哨兵的实现
猜你喜欢

Raytheon technology rushes to the Beijing stock exchange and plans to raise 540million yuan
![Stm32f411 SPI2 output error, pb15 has no pulse debugging record [finally, pb15 and pb14 were found to be short circuited]](/img/ea/8c9f716717bc08f2e563c577738ec8.png)
Stm32f411 SPI2 output error, pb15 has no pulse debugging record [finally, pb15 and pb14 were found to be short circuited]

S32K1xx 微控制器的硬件設計指南
Don't ask me again why MySQL hasn't left the index? For these reasons, I'll tell you all

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

Phpcms background upload picture button cannot be clicked

How to realize clock signal frequency division?

如何写出好代码 - 防御式编程指南

硬件开发笔记(九): 硬件开发基本流程,制作一个USB转RS232的模块(八):创建asm1117-3.3V封装库并关联原理图元器件

An intrusion detection model
随机推荐
Day 3 of rhcsa study
Tableapi & SQL and Kafka message insertion in Flink
使用swiper制作手机端轮播图
Research on manually triggering automatic decision of SAP CRM organization model with ABAP code
Can I choose to open an account on Great Wall Securities? Is it safe?
MySQL service is starting. MySQL service cannot be started. Solution
STM32F411 SPI2输出错误,PB15无脉冲调试记录【最后发现PB15与PB14短路】
S32K1xx 微控制器的硬件设计指南
说明 | 华为云云商店「商品推荐榜」
Microservice tracking SQL (support Gorm query tracking under isto control)
【目标跟踪】|模板更新 时间上下文信息(UpdateNet)《Learning the Model Update for Siamese Trackers》
[cloud trend] new wind direction in June! Cloud store hot list announced
重回榜首的大众,ID依然乏力
智能运维实战:银行业务流程及单笔交易追踪
Wechat applet 01 bottom navigation bar settings
"Qt+pcl Chapter 6" point cloud registration ICP Series 6
自动、智能、可视!深信服SSLO方案背后的八大设计
Wechat applet 02 - Implementation of rotation map and picture click jump
How to realize clock signal frequency division?
Tensorflow team: we haven't been abandoned