画像処理ライブラリOpenCVで直線を描画するlineについて説明する。
関連記事
【OpenCV】長方形を描画するrectangle
【OpenCV】多角形を描画するpolylines/fillPoly
【OpenCV】円を描画するcircle
【OpenCV】楕円を描画するellipse
【OpenCV】長方形を描画するrectangle
【OpenCV】多角形を描画するpolylines/fillPoly
【OpenCV】円を描画するcircle
【OpenCV】楕円を描画するellipse
OpenCVを使うには次のようにインポートが必要。
import cv2
1. 直線を描画するline
2点を結ぶ直線を描画するlineの書式は以下の通り。
cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
引数 | 意味 |
---|---|
img | 円を描画する画像 |
pt1 | 1つ目の点の座標。(x, y)のタプルで指定 |
pt2 | 2つ目の点の座標。(x, y)のタプルで指定 |
color | 線の色。(b, g, r)で指定。 |
thickness(省略可) | 線の枠線の幅(整数)。 |
lineType(省略可) | cv2.FILLED cv2.LINE_8(8連結、デフォルト) cv2.LINE_4(4連結) cv2.LINE_AA(アンチエイリアス処理) |
shift(省略可) | 点の座標を小数表示する場合に使用。指定した場合 (x, y)が (x/2^shift, y/2^shift)となる。 |
幅400高さ300の白画像を作成し、x=100,y=100およびx=300,y=200の2点を結ぶ太さ5の青い線を描画する例。
import cv2 import numpy as np img = np.zeros((300, 400, 3), np.uint8) img[:, :, :] = 255 cv2.line(img, (100, 100), (300, 200), (255, 0, 0), 5) cv2.imwrite('line.png', img)
実行結果
2. 引数lineTypeを指定した場合
lineTypeを指定すると線の種類を選択できる。
cv2.FILLED
cv2.LINE_8(8連結、デフォルト)
cv2.LINE_4(4連結)
cv2.LINE_AA(アンチエイリアス処理)
以下のような違いがある。
import cv2 import numpy as np img = np.zeros((100, 100, 3), np.uint8) img[:, :, :] = 255 cv2.line(img, (60, 20), (10, 80), (255, 0, 0), 2, lineType=cv2.FILLED) cv2.line(img, (70, 20), (20, 80), (255, 0, 0), 2, lineType=cv2.LINE_4) cv2.line(img, (80, 20), (30, 80), (255, 0, 0), 2, lineType=cv2.LINE_8) cv2.line(img, (90, 20), (40, 80), (255, 0, 0), 2, lineType=cv2.LINE_AA) cv2.imwrite('lineType.png', img)
左からcv2.FILLED、cv2.LINE_4、cv2.LINE_8、cv2.LINE_AA
cv2.LINE_AAは中間色を使ったアンチエイリアス処理が施されギザギザが低減される。
実行結果
3. 引数shiftを指定した場合
shiftを指定すると座標が2^shiftで割られた値となる。つまりshift=1の場合1/2、shift=2の場合1/4、shift=3の場合1/8・・・となる。
座標には整数しか与えられないが、shiftにより小数に変換できる。
import cv2 import numpy as np img = np.zeros((300, 400, 3), np.uint8) img[:, :, :] = 255 cv2.line(img, (300, 100), (200, 200), (255, 0, 0), 5) cv2.line(img, (300, 100), (200, 200), (255, 0, 0), 5, shift = 1) cv2.line(img, (300, 100), (200, 200), (255, 0, 0), 5, shift = 2) cv2.line(img, (300, 100), (200, 200), (255, 0, 0), 5, shift = 3) cv2.imwrite('shift.png', img)
左からshift=3、shift=2、shift=1、shiftなし。
実行結果
4. リファレンス
OpenCV > Drawing Functions > line()
使用したバージョン:Python 3.7.0 / OpenCV 4.0.0
0 件のコメント:
コメントを投稿