当前位置:网站首页>[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
边栏推荐
- [advanced ROS] lesson 5 TF coordinate transformation in ROS
- Stm32f411 SPI2 output error, pb15 has no pulse debugging record [finally, pb15 and pb14 were found to be short circuited]
- Short Wei Lai grizzly, to "touch China" in the concept of stocks for a living?
- Photoshop plug-in HDR (II) - script development PS plug-in
- Create employee data in SAP s/4hana by importing CSV
- Redis秒杀demo
- Survey of intrusion detection systems:techniques, datasets and challenges
- vim 从嫌弃到依赖(22)——自动补全
- 《QT+PCL第六章》点云配准icp系列2
- Redis seckill demo
猜你喜欢
Summary of point cloud reconstruction methods I (pcl-cgal)
RT-Thread Env 工具介绍(学习笔记)
Junda technology indoor air environment monitoring terminal PM2.5, temperature and humidity TVOC and other multi parameter monitoring
【STM32-USB-MSC问题求助】STM32F411CEU6 (WeAct)+w25q64+USB-MSC Flash用SPI2 读出容量只有520KB
TensorFlow团队:我们没被抛弃
The solution to turn the newly created XML file into a common file in idea
点云重建方法汇总一(PCL-CGAL)
SQL常用的四个排序函数梳理
Gaussdb (for MySQL):partial result cache, which accelerates the operator by caching intermediate results
Survey of intrusion detection systems:techniques, datasets and challenges
随机推荐
【目标跟踪】|模板更新 时间上下文信息(UpdateNet)《Learning the Model Update for Siamese Trackers》
Recommendation of data acquisition tools and detailed graphic process of data acquisition list
【STM32学习】 基于STM32 USB存储设备的w25qxx自动判断容量检测
Wechat applet 02 - Implementation of rotation map and picture click jump
将ABAP On-Premises系统连接到中央检查系统以进行自定义代码迁移
Samsung took the lead in putting 3nm chips into production, and Shanghai's fresh master students can settle directly. Nankai has established a chip science center. Today, more big news is here
Guide de conception matérielle du microcontrôleur s32k1xx
The difference between arrow function and ordinary function in JS
go-zero实战demo(一)
"Qt+pcl Chapter 6" point cloud registration ICP Series 6
Microservice tracking SQL (support Gorm query tracking under isto control)
做空蔚来的灰熊,以“碰瓷”中概股为生?
Is JPMorgan futures safe to open an account? What is the account opening method of JPMorgan futures company?
厦门灌口镇田头村特色农产品 甜头村特色农产品蚂蚁新村7.1答案
Introduction to MySQL audit plug-in
ABAP-屏幕切换时,刷新上一个屏幕
三星率先投产3nm芯片,上海应届硕士生可直接落户,南开成立芯片科学中心,今日更多大新闻在此...
[advanced ROS] lesson 5 TF coordinate transformation in ROS
MySQL审计插件介绍
Returning to the top of the list, the ID is still weak