如果只是想撸代码,直接看下一篇:
https://blog.csdn.net/HaoZiHuang/article/details/127027469
先来铺垫几个用到的函数cv2.polylines
、cv2.fillPoly
以下内容部分摘自:
http://www.juzicode.com/opencv-python-polylines-puttext
先看一下代码吧:
import cv2
import numpy as np
img = np.zeros((512,512,3)) #白色背景
color=(0,255,0) #绿色
# ------ 五角星的顶点 ------
pts = np.array([[70,190],
[222,190],
[280,61],
[330,190],
[467,190],
[358,260],
[392,380],
[280,308],
[138,380],
[195,260]])
# pts = pts.reshape((-1, 1, 2)) # reshape为 10x1x2 的 numpy.ndarray
print(pts.shape) # (10, 1, 2)
# ------ 绘制图形 ------
cv2.polylines(img,
# [pts-20, pts+30],
[pts],
True, # 是否闭合
color,
5)
# ------ 以下是显示三件套 ------
cv2.imshow('show',img)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.polylines
的参数:
不过有些标注的最后一个点和第一个点是相同的,这种情况下 False/True 都不影响,都会是闭合的,因为最后一个点和第一个点相同
(0, 0, 255)
是红色cv2.fillPoly
[pts]
呢? 为啥是个列表呢? 要不我改成 [pts1, pts2]
试试?[X, 1, 2]
的 np.ndarraycv2.polylines(img,
[pts-20, pts+30],
True, # 是否闭合
color,
5)
这样就绘制了两个多边形,但是颜色都是一样的,所以要绘制多个不同颜色的多边形,还是多次调用这个函数,而不是在这个列表传入多个array
# pts = pts.reshape((-1, 1, 2)) # reshape为 10x1x2 的 numpy.ndarray
我注释掉了,我看好多人的博客,都有这一行,我就我试了一下不用这个操作,结果可以运行,有这个操作还是可以运行,就有些离谱吧,可能 opencv 旧版本需要这个操作???OKOK, 终于把 cv2.polylines
说完了,接下来说这个 cv2.fillPoly
, 他的用法就比较简单了:
import cv2
import numpy as np
img = np.zeros((512,512,3)) #白色背景
color=(0,0,255) # 红色
#五角星
pts = np.array([[70,190],
[222,190],
[280,61],
[330,190],
[467,190],
[358,260],
[392,380],
[280,308],
[138,380],
[195,260],
[70,190]])
cv2.fillPoly(img, # 原图画板
[pts], # 多边形的点
color=(0, 0, 255))
cv2.imshow('show',img)
cv2.waitKey()
看到这里你也许会想做这样的操作:
cv2.fillPoly(img, # 原图画板
[pts-20, pts+30], # 多边形的点
color=(0, 0, 255))
实际上的结果是这样的:
关于为啥是这样,我觉得图像学的知识可以给一个解释,应该是 多边形的扫描转换 那一节,感兴趣的诸位自己看看
下一篇来看多边形分割结果绘制的函数
https://blog.csdn.net/HaoZiHuang/article/details/127027469
(最近好烦啊,意识到一直在搞别人写的函数怎么用… 很少自己写,我就是一个掉包侠wwwwww)