OpenCVで画像に線を描画するには、line()関数を用います。
line()関数の構文
line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) ->img
引数
img | 線の描画先の画像データ |
pt1 | 線の始点の座標 (X座標, Y座標)のタプルで指定します。 ただし、座標の値は整数です。(小数は非対応) |
pt2 | 線の終点の座標 (X座標, Y座標)のタプルで指定します。 ただし、座標の値は整数です。(小数は非対応) |
color | 線色 カラーの場合は、(B, G, R)の順のタプルで指定します。 |
thickness | 線幅を整数で指定します。 |
lineType | cv2.LINE_4 4連結 cv2.LINE_8 8連結(デフォルト) cv2.LINE_AA アンチエイリアス のいずれかを指定します。 |
shift | 点座標の小数ビット数、デフォルトで0 x, y座標が以下の式に基づいて変換されます。 (x, y) -> (x * 2^(-shift), y * 2^(-shift)) |
戻り値
img | 画像データに追加で線が描画された画像データ(引数で渡した画像と同じデータ) |
サンプルプログラム
import cv2
import numpy as np
img = np.zeros((10, 10, 3), dtype = np.uint8)
cv2.line(img, (1, 0), (8, 3), (10, 20, 128), 1)
cv2.line(img, (8, 5), (1, 8), (255, 128, 10), 1)
cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
cv2.imshow("Image", img)
cv2.waitKey()
実行結果
まとめ
線の始点、終点の座標は整数となります。
特に、座標を計算で求めた時に、小数座標を渡してエラーにはまりやすいので、注意してください。
参考リンク
https://docs.opencv.org/4.8.0/d6/d6e/group__imgproc__draw.html#ga7078a9fae8c7e7d13d24dac2520ae4a2
https://imagingsolution.net/program/python/opencv-python/opencv-reference/opencv-python-linetypes/
https://imagingsolution.net/program/python/opencv-python/create_new_opencv_image_data/
https://docs.opencv.org/3.4/d6/d6e/group__imgproc__draw.html