画像処理ライブラリOpenCVで円を描画するcircleについて説明する。
関連記事
【OpenCV】直線を描画するline
【OpenCV】長方形を描画するrectangle
【OpenCV】多角形を描画するpolylines/fillPoly
【OpenCV】楕円を描画するellipse
【OpenCV】直線を描画するline
【OpenCV】長方形を描画するrectangle
【OpenCV】多角形を描画するpolylines/fillPoly
【OpenCV】楕円を描画するellipse
OpenCVを使うには次のようにインポートが必要。
import cv2
1. 円を描画するcircle
円を描画するcircleの書式は以下の通り。
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
引数 | 意味 |
---|---|
img | 円を描画する画像 |
center | 円の中心座標。(x, y)のタプルで指定 |
radius | 円の半径 |
color | 円の色。(b, g, r)で指定。 |
thickness(省略可) | 円の枠線の幅。-1の場合は塗りつぶしになる。 デフォルトは1 |
lineType(省略可) | cv2.FILLED cv2.LINE_8(8連結、デフォルト) cv2.LINE_4(4連結) cv2.LINE_AA(アンチエイリアス処理) |
shift(省略可) | 座標および半径を小数表示する場合に使用。指定した場合 (x, y), r が (x/2^shift, y/2^shift), r/2^shift となる。 デフォルトは0 |
幅400高さ300の白画像を作成し、x=250,y=100の位置に半径90の赤い塗りつぶした円を描画する例。
import cv2 import numpy as np img = np.zeros((300, 400, 3), np.uint8) img[:, :, :] = 255 cv2.circle(img, (250, 100), 90, (0,0,255), -1) cv2.imwrite('circle.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.circle(img, (100, 50), 90, (0,0,255), lineType=cv2.FILLED) cv2.circle(img, (120, 50), 90, (0,0,255), lineType=cv2.LINE_4) cv2.circle(img, (140, 50), 90, (0,0,255), lineType=cv2.LINE_8) cv2.circle(img, (160, 50), 90, (0,0,255), 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を指定すると円の中心座標(center)および半径(radius)が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.circle(img, (250, 100), 90, (0,0,255), -1) cv2.circle(img, (250, 100), 90, (0,0,255), -1, shift = 1 ) cv2.circle(img, (250, 100), 90, (0,0,255), -1, shift = 2 ) cv2.circle(img, (250, 100), 90, (0,0,255), -1, shift = 3 ) cv2.imwrite('shift.png', img)
左からshift=3、shift=2、shift=1、shiftなし。
実行結果
4. リファレンス
OpenCV > Drawing Functions > circle()
使用したバージョン:Python 3.7.0 / OpenCV 4.0.0
0 件のコメント:
コメントを投稿