參數解釋
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()
運行結果:
填充一個空心多邊形【其實是填充了直線】
填充一個實心