2021年6月27日日曜日

【OpenCV】多角形を描画するpolylines/fillPoly

 画像処理ライブラリOpenCVで多角形を描画するpolylines/fillPolyについて説明する。

OpenCVを使うには次のようにインポートが必要。
import cv2


1. 折れ線を描画するpolylines

 polylinesは指定した座標を線で連結し折れ線を描画する。終点と始点を結ぶと閉じた多角形が描画できる。
書式は以下

cv.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]])
引数 意味
img 描画する画像
pts 頂点の座標のリスト(ndarray)
isClosed 終点と始点を結ぶか。True/False
color 折れ線の色
thickness 折れ線の辺の太さ
lineType 折れ線の種類
shift 折れ線の頂点座標において,小数点以下の桁を表すビット数


 幅400高さ300の黒い画像に、(x, y)座標が(200,100)、(50,180)、(350,250)の3点を結ぶ赤い三角形を線の太さ4で描画する場合。ptsは(x,y)座標の2次元ndarrayのリストとなる。isClosedTrueとして終点と始点を結んでいる。

import numpy as np
import cv2

img = np.zeros([300, 400, 3])

pts = np.array([[200,100],[50,180],[350,250]])

cv2.polylines(img, [pts], True, (0, 0, 255), thickness=4)
cv2.imwrite('polylines.png', img)

実行結果



 isClosedFalseとした場合は終点と始点が結ばれない。

import numpy as np
import cv2

img = np.zeros([300, 400, 3])

pts = np.array([[200,100],[50,180],[350,250]])

cv2.polylines(img, [pts], False, (0, 0, 255), thickness=4)
cv2.imwrite('polylines.png', img)

実行結果



lineTypeshiftについては以下を参照。

【OpenCV】長方形を描画するrectangle



2. 塗りつぶされた多角形を描画するfillPoly

 fillPolyは塗りつぶされた多角形を描画する。書式は以下

cv.fillPoly(img, pts, color[, lineType[, shift[, offset]]]) 
引数 意味
img 描画する画像
pts 頂点の座標のリスト(ndarray)
color 折れ線の色
lineType 折れ線の種類
shift 折れ線の頂点座標において,小数点以下の桁を表すビット数


 幅400高さ300の黒い画像に、(x, y)座標が(200,100)、(50,180)、(350,250)の3点を結ぶ塗りつぶされた赤い三角形描画する場合。

import numpy as np
import cv2

img = np.zeros([300, 400, 3])

pts = np.array([[200,100],[50,180],[350,250]])

cv2.fillPoly(img, [pts], (0, 0, 255))
cv2.imwrite('fillPoly.png', img)

実行結果



3. リファレンス

OpenCV > Drawing Functions > polylines()
OpenCV > Drawing Functions > fillPoly()

使用したバージョン:Python 3.7.0 / OpenCV 4.0.0

0 件のコメント:

コメントを投稿