基本図形の描画2 – 円・楕円・矩形【OpenCV】

OpenCVを用いた基本図形の描画について説明します。

円の描画

circle関数を用いて、画像・中心座標・半径・色を指定することで円を描画します。

import numpy as np
import cv2
 
img = np.zeros((200, 200, 3), np.uint8)
cv2.circle(img, (100, 100), 50, (255, 255, 0))
 
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

circle関数のthickness引数を負の値に設定することで円の内部を塗りつぶすことができます。

import numpy as np
import cv2
 
img = np.zeros((300, 300, 3), np.uint8)
cv2.circle(img, (100, 100), 50, (255, 255, 0), thickness=-1)
 
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

楕円の描画

ellipse関数を用いて、画像・楕円の形状(RotatedRect型)・色を指定することで楕円を描画します。楕円の形状は楕円が外接する回転矩形(RotatedRect型)で指定します。例えば、中心(150, 150)で横200, 縦120の矩形を時計回りに20度回転させた回転矩形はRotatedRect型で((150, 150), (200, 120), 20)と表します。この回転矩形に内接する楕円は以下のようになります。

import numpy as np
import cv2
 
img = np.zeros((300, 300, 3), np.uint8)
cv2.ellipse(img, ((150, 150), (200, 120), 20), (255, 255, 0))
 
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

ellipse関数のthickness引数を負の値に設定することで楕円の内部を塗りつぶすことができます。

import numpy as np
import cv2
 
img = np.zeros((300, 300, 3), np.uint8)
cv2.ellipse(img, ((150, 150), (200, 120), 20), (255, 255, 0), thickness=-1)
 
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

矩形の描画

回転してない矩形の描画

rectangle関数を用いて、画像・矩形の左上と右下のの座標・色を指定することで矩形を描画することができます。

import numpy as np
import cv2
 
img = np.zeros((300, 300, 3), np.uint8)
cv2.rectangle(img, (100, 100), (250, 200), (255, 255, 0))
 
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

また、rectangle関数を用いて、画像・矩形の形状(Rect型)・色を指定することでも矩形を描画することができます。矩形の形状はRect型で(矩形の左上のX座標・Y座標、矩形の幅・高さ)として指定します。

import numpy as np
import cv2
 
img = np.zeros((300, 300, 3), np.uint8)
cv2.rectangle(img, (100, 100, 150, 100), (255, 255, 0))
 
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

円・楕円の場合と同様に、thickness引数に負の値を指定することで、内部を塗りつぶすことができます。

回転矩形(RotatedRect)の描画

OpenCVではRotatedRectを描画する関数は用意されていません。RotatedRectを描画するには任意の多角形を描画するpolylines関数を用います。コード例はこちらをご覧ください。

リファレンス

circle(img, center, radius, color, thickness=1, lineType=cv2.LINE_8, shift=0)

@ [APIドキュメント]

  • 引数
    • img:円を描画する画像 <ndarray>
      • 引数として指定したimgにも円が上書きされてしまうので注意が必要!
    • center:円の中心の座標 <Point>
    • radius:円の半径 <int>
    • color:円の色 <Scalar>
    • thickness:円を描く線の太さ <int>
      • 負の値で指定すると、塗りつぶしになる
    • lineType:円を描く線の種類 <int>
    • shift:座標の小数点以下の桁を表すビット数 <int>
  • 戻り値:円が描画された画像 <ndarray>

ellipse(img, box, color, thickness=1, lineType=cv2.LINE_8)

@ [APIドキュメント]

  • 引数:
    • img:楕円を描画する画像 <ndarray>
      • 引数として指定したimgにも楕円が上書きされてしまうので注意が必要!
    • box:楕円が内接する長方形 <RotatedRect>
    • color:楕円の色 <Scalar>
    • thickness: 楕円を描く線の太さ <int>
      • 負の値で指定すると、塗りつぶしになる
    • lineType:楕円を描く線の種類 <int>
  • 戻り値:楕円が描画された画像 <ndarray>

rectangle(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)

@ [APIドキュメント]

  • 引数
    • img:矩形を描画する画像 <ndarray>
      • 引数として指定したimgにも矩形が上書きされてしまうので注意が必要!
    • pt1:描画する矩形の頂点の座標 <Point>
    • pt2:描画する矩形のpt1と対角線側の頂点の座標 <Point>
    • color:矩形の色 <Scalar>
    • thickness:矩形を描く線の太さ <int>
    • lineType:矩形を描く線の種類 <int>
      • 負の値で指定すると、塗りつぶしになる
    • shift:座標の小数点以下の桁を表すビット数 <int>
  • 戻り値:矩形が描画された画像 <ndarray>

rectangle(img, rec, color, thickness=1, lineType=cv2.LINE_8, shift=0)

@ [APIドキュメント]

  • 引数
    • img:矩形を描画する画像 <ndarray>
      • 引数として指定したimgにも矩形が上書きされてしまうので注意が必要!
    • rec:描画する矩形 <Rect>
    • color:矩形の色 <Scalar>
    • thickness:矩形を描く線の太さ <int>
    • lineType:矩形を描く線の種類 <int>
      • 負の値で指定すると、塗りつぶしになる
    • shift:座標の小数点以下の桁を表すビット数 <int>
  • 戻り値:矩形が描画された画像 <ndarray>

関連記事・スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です