cv2.circle関数ってどう使うんですか・・・?
cv2.circle関数は円を描画する時に使う。
使い方や引数を解説しよう。
✔️ 本記事のテーマ
cv2.circle関数の使い方
✔️ 読者さんへの前置きメッセージ
本記事は「OpenCV の circle関数」について書いています。
この記事を読むことで
「cv2.circleの使い方 や 画像に円を描画する方法」
について理解できます。
OpenCVには図形を描画するための様々な関数が用意されています。
その中の一つにcv2.circle関数があります。
cv2.circle関数を使うことで「画像に円を描画する」ことができます。
この記事ではcv2.circle関数の使い方や関数に与える引数まで徹底的に解説します。
それでは、解説していきましょう。
cv2.circle関数のサンプルコード
cv2.circleを使用したサンプルコードは以下のようなコードです。
この記事ではこのサンプルコードに沿って解説していきます。
import cv2
img = cv2.imread('./sample.png')
cv2.circle(img,
center=(100, 150),
radius=60,
color=(0, 255, 0),
thickness=3,
lineType=cv2.LINE_4,
shift=0)
cv2.imwrite('./sample_after.png', img)
このサンプルコードによって、生成される画像がこちらです。
このようにcv2.circle関数を使用することで、画像中に円を描画することができます。
cv2.circle関数の引数について
サンプルコードの通り、cv2.circle関数は7個の引数を取ります。
cv2.circle(img,
center=(100, 150),
radius=60,
color=(0, 255, 0),
thickness=3,
lineType=cv2.LINE_4,
shift=0)
これらの引数がどのような意味を持つのかを順番に解説していきましょう。
cv2.circle関数の第1引数:img
cv2.circle関数の第1引数 img は対象の画像データです。
Ndarray 型で指定します。
OpenCVで画像処理を行うためには、
まずcv2.imread関数によって画像データを読み込む必要があります。
img = cv2.imread('./sample.png')
サンプルコードではpythonファイルと同階層にある sample.png を読み込んでいます。
このようにして、読み込んだ画像データをcv2.circle関数に引数として渡すことで、その画像データに対して円を描画します。
なお、OpenCVによる画像の読み込みについては
「OpenCVで画像を読み込む方法【Python】」
の記事で解説しています。
cv2.circle関数の第2引数:center
cv2.circleの第2引数 center は描画する円の中心点の座標です。
(int型, int型)のtupleで指定します。
ちょうど以下の画像の青点の座標です。
座標は(x座標のピクセル, y座標のピクセル)の形式で指定する必要があります。
サンプルコードでは center=(100, 150) と指定しているので、
x座標: 50px, y座標: 150pxを始点とする直線を描画しています。
試しに center=(200, 150) と指定すると、
以下の画像のように描画する円の中心点が右に移動します。
import cv2
img = cv2.imread('./sample.png')
cv2.circle(img,
center=(200, 150),
radius=60,
color=(0, 255, 0),
thickness=3,
lineType=cv2.LINE_4,
shift=0)
cv2.imwrite('./sample_after.png', img)
cv2.circle関数の第3引数:radius
cv2.circleの第3引数 radiusは描画する円の半径です。
int型で指定します。
座標は(x座標のピクセル, y座標のピクセル)で指定する必要があります。
サンプルコードでは radius=60 と指定しているので、
半径: 60px の円を描画しています。
試しに radius=30 と指定すると、
以下の画像のように小さな円が描画されます。
import cv2
img = cv2.imread('./sample.png')
cv2.circle(img,
center=(100, 150),
radius=30,
color=(0, 255, 0),
thickness=3,
lineType=cv2.LINE_4,
shift=0)
cv2.imwrite('./sample_after.png', img)
cv2.circle関数の第4引数:color
cv2.circleの第4引数 color は描画する円周の色です。
(int型, int型, int型)のtupleで指定します。
colorは以下のBGR形式で指定する必要があります。
color = (青, 緑, 赤)
このような順番で3原色を数値で指定します。
各色の最大値は255です。
サンプルコードでは color=(0, 255, 0) としているので緑色を指定していることになります。
試しに color=(255, 0, 0)とすると、以下の画像のように青色の直線が描画されます。
import cv2
img = cv2.imread('./sample.png')
cv2.circle(img,
center=(100, 150),
radius=60,
color=(255, 0, 0),
thickness=3,
lineType=cv2.LINE_4,
shift=0)
cv2.imwrite('./sample_after.png', img)
cv2.circle関数の第5引数:thickness
cv2.circleの第5引数 thickness は描画する線の太さです。
int型で指定します。
以下の形式で描画する線の太さを指定することができます。
thickness = 数値(ピクセル)
サンプルコードでは thickness=3 としているので太さ3pxの線を描画しています。
なお、引数thicknessに負の数を渡すと、円の内部を塗りつぶす挙動になります。
試しにサンプルコードを thickness=-1 としてプログラムを実行すると以下の画像が生成されます。
import cv2
img = cv2.imread('./sample.png')
cv2.circle(img,
center=(100, 150),
radius=60,
color=(0, 255, 0),
thickness=-1,
lineType=cv2.LINE_4,
shift=0)
cv2.imwrite('./sample_after.png', img)
ちなみに、thicknessはデフォルト引数なので、
引数を渡さなくともcv2.circle関数は動きます。
引数で値を渡さなかった場合は thickness=1の挙動になります。
なお、デフォルト引数については
「pythonのデフォルト引数についての解説」
の記事で解説しています。
cv2.circle関数の第6引数:lineType
cv2.circleの第6引数 lineType は線を描画するアルゴリズムの種類です。
OpenCVの独自コードで指定します。
引数lineTypeでは以下のアルゴリズムを選択することができます。
- 4連結: cv2.LINE_4
- 8連結: cv2.LINE_8(デフォルト)
- アンチエイリアス: cv2.LINE_AA
lineTypeはデフォルト引数なので、引数を渡さなくともcv2.circle関数は動きます。
引数で値を渡さなかった場合は lineType=cv2.LINE_8 の挙動になります。
アンチエイリアスとはピクセルの境目に出るギザギザを滑らかに表現する手法です。
ただ、長方形の描画では上記3つとも目でみてわかる違いはないです。
文字の描画などにすると違いが多少分かります。
なお、OpenCVによる文字の描画については
「【OpenCV】cv2.putText関数の使い方【文字を描画する】」
の記事で解説しています。
cv2.circle関数の第7引数:shift
cv2.circleの第7引数 shift は各座標において小数点以下の桁を表すビット数です。
int型で指定します。
これは正直あまり違いが分からないので、特に気にしなくても良いです。
shiftもデフォルト引数なので、特に値を渡さなければ shift=0として扱われます。
一応解説すると、shiftを指定した場合、座標(x, y)は以下の式で計算されます。
(x*2^(-shift), y*2^(-shift))
より正確な値で座標を指定することができるので、
理論上はより滑らかな描画を可能にしますが、目に見える違いはほとんどないです。
画像処理プログラミングを独学で勉強するなら
OpenCVのcircle関数の使い方と引数について解説しました。
OpenCVは画像処理には欠かすことのできないライブラリです。
もし、OpenCVについて独学でスキルをつけるなら、以下の書籍がオススメです。
この書籍はOpenCVの基礎から応用までを
丁寧にかつ詳細に解説しています。
OpenCVのほぼ全てを網羅しているとも言えるほどの徹底ぶりなので、
関数のリファレンスとしても使用することができます。
本記事で解説したcv2.circle関数も掲載されています。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント