OpenCVで矩形(長方形)を描画するにはrectangle()関数を用います。
rectangle()関数には、長方形の対角の2点の座標を指定する方法と、Rect(長方形の左上のX座標、Y座標、幅、高さ)を指定する方法があります。
長方形の対角の2点を指定する方法
rectangle( img, pt1, pt2, color[, thickness[, lineType[, shift]]] ) -> img
引数
img | 線の描画先の画像データ |
pt1 | 矩形を構成する座標 (X座標, Y座標)をタプルで指定します。 ただし、座標の値は整数です。(小数は非対応) |
pt2 | pt1の対角の座標 (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)) |
pt1, pt2の座標は、長方形の対角の座標であれば、組み合わせ、順番は任意に指定できます。
戻り値
img | 画像データに追加で線が描画された画像データ(引数で渡した画像と同じデータ) |
サンプルプログラム
import cv2
import numpy as np
img = np.zeros((10, 15, 3), dtype = np.uint8) # 幅15画素、高さ10画素で確保
# Rectで矩形の描画
# Rectは (左上のX座標、Y座標、矩形の幅、高さを指定)
cv2.rectangle(img, (1, 1), (13, 8), (0, 0, 255), 1)
cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
cv2.imshow("Image", img)
cv2.waitKey()
実行結果
Rect(長方形の左上のX座標、Y座標、幅、高さ)を指定する方法
rectangle( img, rec, color[, thickness[, lineType[, shift]]] ) -> img
引数
img | 線の描画先の画像データ |
rec | 矩形の領域を、矩形の(左上の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, 15, 3), dtype = np.uint8) # 幅15画素、高さ10画素で確保
# Rectで矩形の描画
# Rectは (左上のX座標、Y座標、矩形の幅、高さを指定)
cv2.rectangle(img, (1, 1, 13, 8), (255, 0, 0), 1)
cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
cv2.imshow("Image", img)
cv2.waitKey()
実行結果
注意点
矩形の左上のX座標、Y座標、幅、高さで指定したとき、幅方向、高さ方法の座標間の距離は、
矩形の幅 – 1、矩形の高さ – 1
になる事に注意してください。
rec = (1, 1, 13, 8) として、指定した場合の座標は、以下のようになります。
関連リンク
https://imagingsolution.net/program/python/opencv-python/opencv-reference/opencv-python-line/
参照ページ
https://docs.opencv.org/4.8.0/d6/d6e/group__imgproc__draw.html#ga07d2f74cadcf8e305e810ce8eed13bc9