参数解释
cv2.fillPoly()
和 cv2.polylines()
都是 OpenCV 的函数。功能是绘制多边形
,cv2.fillPoly()
可绘制实心多边形, cv2.polylines()
可绘制空心多边形
cv2.fillPoly()
用途:提取ROI- 可在黑色图像上,填充白色,作为掩膜(记为图1)。之后把图1与图2做
按位与
(cv2.bitwise_and()
)运算,仅保留多边形区域内的像素,其余区域置为黑色。
- 可在黑色图像上,填充白色,作为掩膜(记为图1)。之后把图1与图2做
cv2.fillPoly()
该函数用于在图像上填充由多个多边形构成的区域,其基本语法如下:
cv2.fillPoly(img, pts, color, lineType=cv2.LINE_8, shift=0, offset=(0, 0))
各参数含义如下:
img
:这是目标图像,即要在其上进行填充操作的图像。pts
:是一个包含多个多边形顶点数组的列表。每个多边形顶点数组的数据类型应为numpy.ndarray
,且数据类型为int32
,形状通常为(n, 1, 2)
,其中n
是该多边形的顶点数量。color
:指定填充的颜色。在 RGB 色彩空间中,它是一个三元组,例如(255, 0, 0)
代表红色。lineType
(可选):用于指定边界线的类型,默认值是cv2.LINE_8
,还可以选择cv2.LINE_4
或cv2.LINE_AA
等。shift
(可选):表示顶点坐标的小数位数,默认值为 0。offset
(可选):是一个可选的偏移量,默认值为(0, 0)
,用于对顶点坐标进行偏移。
cv2.polylines()
此函数用于在图像上绘制多条折线,其基本语法如下:
cv2.polylines(img, pts, isClosed, color, thickness=1, lineType=cv2.LINE_8, shift=0)
参数:
img
:同样是目标图像,即要在其上绘制折线的图像。pts
:和cv2.fillPoly()
中的pts
类似,是一个包含多个折线顶点数组的列表,每个顶点数组的数据类型为numpy.ndarray
,形状通常为(n, 1, 2)
。isClosed
:这是一个布尔类型的参数。当为True
时,折线的最后一个顶点会与第一个顶点相连,形成封闭的多边形;当为False
时,折线不会闭合。color
:指定折线的颜色,同样是 RGB 色彩空间下的三元组。thickness
(可选):表示折线的线宽,默认值为 1。lineType
(可选):指定折线的类型,默认值是cv2.LINE_8
。shift
(可选):表示顶点坐标的小数位数,默认值为 0。
折线类型
简单来讲,从模糊到清楚:cv2.LINE_4
->cv2.LINE_8
->cv2.LINE_AA
二、代码&运行结果
import cv2
import numpy as np# 创建一个空白的黑色图像
image = np.zeros((500, 500, 3), dtype=np.uint8)
image_contour = image.copy()# 定义多边形的顶点
pts = np.array([[100, 100], [200, 50], [300, 200],[250, 300], [150, 250]], np.int32)
print(f'pts.shape: {pts.shape}')
# 为了符合 cv2.fillPoly 的要求,需要将顶点数组的形状进行调整
pts = pts.reshape((-1, 1, 2))
print(f'pts.shape: {pts.shape}')
# 绘制多边形轮廓
cv2.polylines(image_contour, [pts], True, (0, 255, 0), 2)# 显示绘制轮廓后的图像
cv2.imshow('Polygon Contour', image_contour)
cv2.waitKey(0)# 填充多边形
cv2.fillPoly(image, [pts], (0, 255, 0))# 显示填充后的图像
cv2.imshow('Filled Polygon', image)
cv2.waitKey(0)cv2.destroyAllWindows()
运行结果:
填充一个空心多边形【其实是填充了直线】
填充一个实心