【Python・OpenCV】直線を描画する(cv2.line)

※当サイトではアフィリエイト広告を利用しています

Python プログラミング 画像処理

【Python・OpenCV】基本図形の一つ、直線の描画について解説(cv2.line)

2023-05-24

はじめに

画像の上に直線を描画方法について解説します。

直線を描画

2 点を結ぶ直線を描画するためにはcv2.line関数を使用します。

cv2.line関数

cv2.line(入力画像, pt1, pt2, color[, thickness[, lineType[, shift]]])

線分は画像の境界でクリップされます。
整数座標を持つ非アンチエイリアス ラインの場合、8 連結または 4 連結 Bresenham アルゴリズムが使用されます。太い線は、丸みのある端で描かれます。アンチエイリアス処理された線は、ガウス フィルタリングを使用して描画されます。

引数

名称説明
入力画像(必須)入力画像データ
pt1(必須)線の始点の座標
pt2(必須)線の終点の座標
color(必須)線の色
thickness(オプション)線の太さ(1以上、デフォルト:"1")
lineType(オプション)線の種類(デフォルト:cv.2LINE_8)
shift(オプション)座標の小数ビット数(デフォルト:"0")

使い方

引数のlineTypeはLineTypesに示す4種類のいずれかとなります。デフォルトはcv2.LINE_8です。
LineTypesにはcv2.FILLED(塗りつぶし)という値も存在しますが、cv2.line関数では使用することができません。Pythonでは実行時にエラーとなります。

LineTypes(線の種類)

線の種類を比較した結果が下の画像です。
上から順番にcv2.LINE_4cv2.LINE_8cv2.LINE_AAを指定して描画しています。
cv2.LINE_4が一番ギザギザした印象で、cv2.LINE_AAはアンチエイリアス処理されとても綺麗な線となっています。

線の種類説明
cv2.FILLEDcv2.line関数では使用不可
cv2.LINE_44 連結
cv.2LINE_88 連結(デフォルト)
cv2.LINE_AAアンチエイリアス処理された線

この画像を作成したソースコードを示します。

import cv2
import numpy as np

# Create black empty images
size = 95, 150, 3

# cv.lineに設定するパラメータ
line_color = (255, 0, 255) # マゼンタ
thickness = 1

# 白で塗りつぶした画像を作成
image = np.full(size, 255, dtype=np.uint8)

# 2本目の線 cv2.LINE_4で描画
pt1 = 20, 20
pt2 = 130, 35
line_type = cv2.LINE_4
cv2.line(image, pt1, pt2, line_color, thickness, line_type)

# 3本目の線 cv2.LINE_8で描画
pt1 = 20, 40
pt2 = 130, 55
line_type = cv2.LINE_8
cv2.line(image, pt1, pt2, line_color, thickness, line_type)

# 4本目の線 cv2.LINE_AAで描画
pt1 = 20, 60
pt2 = 130, 75
line_type = cv2.LINE_AA
cv2.line(image, pt1, pt2, line_color, thickness, line_type)

shift(座標の少数ビット数)

shiftは座標を小数点以下で指定する場合の小数点以下の桁数を示すビット数です。デフォルトは”0”となっており、整数の座標のみを扱う状態になっています。より正確な描画が必要な時に使用しますが、通常の使用ではデフォルトの”0”でよいでしょう。

最後までご覧いただきありがとうございました。

■(広告)OpenCVの参考書としてどうぞ!■

参考リンク

-Python, プログラミング, 画像処理
-