cv2作图cv2.polylines,cv2.fillPoly,cv2.fillConvexPoly多边形时需要注意的地方

整体注意坐标点必须都是int

画多边形的坐标点注意,

可以同时画多个独立的多边形,一个或多个多边形的坐标点放在一个或多个numpy的数组中,而这个数组需要放入一维list中,但即使只有一个numpy的坐标点数组也必须有一个list框,下面第一行

cv2.polylines(Img,[points_arr],2,(0,0,255))
cv2.polylines(Img,[points_arr,points_arr1],2,(0,0,255))

填充多边形

参考:http://t.zoukankan.com/Ph-one-p-12082692.html

cv2.polylines,画多条线

import cv2
import numpy as np
img=np.zeros((500,750,3),np.uint8)
points_arr = np.array([100,100,200,200,300,200,400,100],np.int).reshape(1,4,2)
print(points_arr)
Img = cv2.polylines(img,points_arr,True(0,0,255)) # 最后的参数是作图的颜色bgr
cv2.imshow('img',Img)
cv2.waitKey(0)

cv2作图cv2.polylines,cv2.fillPoly,cv2.fillConvexPoly多边形时需要注意的地方_第1张图片
将坐标矩阵改写成

points_arr = np.array([100, 100, 200, 200, 300, 200,
                       400, 100, 400, 200, 500, 400], np.int).reshape(2, 3, 2)

cv2作图cv2.polylines,cv2.fillPoly,cv2.fillConvexPoly多边形时需要注意的地方_第2张图片

cv2.fillConvexPoly

Img = cv2.fillConvexPoly(img,[points_arr], (0,0,255))

cv2作图cv2.polylines,cv2.fillPoly,cv2.fillConvexPoly多边形时需要注意的地方_第3张图片

两个填充的区别

两个的函数的参数必须是numpy的数组。

>cv2.fillPoly()函数可以用来填充任意形状的图型,可以一次填充多个图型.
>cv2.fillPoly()填充的点矩阵放入[]中,而另一种不用
>cv2.fillConvexPoly()函数==‘只能’==用来填充凸多边形,但实验时发现两种方式都能画任意多边形
import cv2
import numpy as np
img=np.zeros((500,750,3),np.uint8)
# cv2.line(img,(10,10),(200,200),(0,255,0),8)#绿色,3个像素宽度
# points_arr = np.array([[100,100],[200,100],[200,200],[170,130]])
points_arr = np.array([[100,0],[75,75],[0,100],[75,125],[100,200],[125,125],[200,100],[125,75]])  ## shape是(4,2)
cv2.fillConvexPoly(img,points_arr, (0,0,255))
# cv2.fillPoly(img,[points_arr],(0,0,255))
# Img = cv2.polylines(img,[points_arr], 2,(0,0,255))
cv2.imshow('ing',img)
cv2.waitKey(0)

cv2作图cv2.polylines,cv2.fillPoly,cv2.fillConvexPoly多边形时需要注意的地方_第4张图片

你可能感兴趣的:(笔记,一些自己的小用法,cv2)