cv2.fillPoly()和cv2.polylines()

参数解释

cv2.fillPoly()cv2.polylines() 都是 OpenCV 的函数。功能是绘制多边形cv2.fillPoly()可绘制实心多边形, cv2.polylines() 可绘制空心多边形

  • cv2.fillPoly()用途:提取ROI
    • 可在黑色图像上,填充白色,作为掩膜(记为图1)。之后把图1与图2做按位与(cv2.bitwise_and())运算,仅保留多边形区域内的像素,其余区域置为黑色。

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_4cv2.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

cv2.fillPoly()和cv2.polylines()_第1张图片

二、代码&运行结果

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()

运行结果:
填充一个空心多边形【其实是填充了直线】
cv2.fillPoly()和cv2.polylines()_第2张图片
填充一个实心
cv2.fillPoly()和cv2.polylines()_第3张图片

你可能感兴趣的:(杂物暂存,python,opencv)