画像処理ライブラリ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のリストとなる。isClosedはTrueとして終点と始点を結んでいる。
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)
実行結果
isClosedをFalseとした場合は終点と始点が結ばれない。
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)
実行結果
lineType、shiftについては以下を参照。
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 件のコメント:
コメントを投稿