OpenCVで画像に円を描画するには、circle()関数を用います。
circle()関数の構文
circle( img, center, radius, color[, thickness[, lineType[, shift]]] ) -> img
引数
img | 円の描画先の画像データ |
center | 中心の座標 (X座標, Y座標)のタプルで指定します。 ただし、座標の値は整数です。(小数は非対応) |
radius | 円の半径を整数で指定します。 |
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 | 画像データに追加で円が描画された画像データ(引数で渡した画像と同じデータ) |
lineType(アンチエイリアス)を変えながら描画したサンプル
import cv2
import numpy as np
img = np.zeros((50, 50, 3), dtype = np.uint8)
cv2.circle(img, (25, 25), 20, (255, 0, 0), 1, cv2.LINE_4)
cv2.circle(img, (25, 25), 15, (0, 255, 0), 1, cv2.LINE_8)
cv2.circle(img, (25, 25), 10, (0, 0, 255), 1, cv2.LINE_AA)
cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
cv2.imshow("Image", img)
cv2.waitKey()
実行結果
線幅を変えながら描画したサンプル
import cv2
import numpy as np
img = np.zeros((50, 50, 3), dtype = np.uint8)
cv2.circle(img, (25, 25), 22, (255, 0, 0), 3)
cv2.circle(img, (25, 25), 15, (0, 255, 0), 2)
cv2.circle(img, (25, 25), 10, (0, 0, 255), 1)
cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
cv2.imshow("Image", img)
cv2.waitKey()
実行結果
円の内側を塗りつぶして描画したサンプル
import cv2
import numpy as np
img = np.zeros((50, 50, 3), dtype = np.uint8)
cv2.circle(img, (25, 25), 20, (255, 0, 0), -3)
cv2.circle(img, (25, 25), 15, (0, 255, 0), -2)
cv2.circle(img, (25, 25), 10, (0, 0, 255), -1)
cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
cv2.imshow("Image", img)
cv2.waitKey()
実行結果
半径(radius)が負の場合、値の大きさに関係なく、円の内側が塗りつぶされます。
参考リンク
https://docs.opencv.org/4.8.0/d6/d6e/group__imgproc__draw.html#gaf10604b069374903dbd0f0488cb43670
https://imagingsolution.net/program/python/opencv-python/opencv-reference/opencv-python-linetypes/