KURORO BLOGのロゴ

このエントリーをはてなブックマークに追加
OpenCVで使われるcircleとは?関数の定義から活用法を徹底解説!?

OpenCVで使われるcircleとは?関数の定義から活用法を徹底解説!?

今回はOpenCVで使われるcircleに関して、関数の定義から活用法を徹底解説致します。circle関数を学びたい、画像内へ円を描画してみたい方はおすすめです。ぜひ最後までご覧ください。

目次
  1. OpenCVで使われるcircleとは?
  2. OpenCVで使われるcircle関数の定義
    1. 円の枠線の色と塗りつぶし色を変えたい場合
  3. まとめ
  4. 参考文献

執筆者 - おすすめの記事3選

OpenCVで使われるcircleとは?

OpenCVで使われるcircleとは、画像内へ円を描画する関数です。

具体的なイメージとしては、以下の「circle関数のイメージ画像」の赤色で描画される箇所を、イメージしてもらうと良いでしょう。

【circle関数のイメージ画像】

OpenCVで使われるcircle関数の定義

circle関数は、

1# cv2(OpenCV)を利用する宣言を行う。
2import cv2
3
4# circle関数 : 画像内へ円を描画する関数
5# circle関数公式ドキュメント : https://docs.opencv.org/3.4.0/d6/d6e/group__imgproc__draw.html#gaf10604b069374903dbd0f0488cb43670
6
7# 第一引数(必須) : 多次元配列(画像情報)
8
9###############################
10# 第二引数(必須) : 円の中心座標。tuple型。
11# tuple型とは? : https://atmarkit.itmedia.co.jp/ait/articles/1906/14/news015.html
12# 例) : (100, 150) ⏩ 円の中心座標をx座標100px, y座標150pxとする。
13# ※ 第二引数を指定する際は、画像の左上角が(0, 0)であることに留意する。
14############################### 
15
16###############################
17# 第三引数(必須) : 円の半径(px)を指定する。int型(0以上の整数のみ指定可能)。
18# ※ 0の値を指定すると、画像内へ円を生成しない。
19# 例) : 10 ⏩ 円の半径を10pxとする。
20############################### 
21
22###############################
23# 第四引数(必須) : 円の色を指定する。B(Blue)G(Green)R(Red)形式で指定する。tuple型。
24# 例) : (255, 0, 0) ⏩ 円の色を青色にする。
25# 以下のサイトを利用して、円の色を考えると良いでしょう。
26# https://www.peko-step.com/tool/tfcolor.html
27###############################
28
29# <第五引数以降(順不同、任意)>
30# thickness : 円の枠線の太さ(px)を指定する。int型。デフォルト(thicknessを指定しない場合)は1が設定される。
31# 0を指定する場合、デフォルト(thicknessを指定しない場合)と同じ(1)になる。
32# 負の整数(-1, -3など)を与えると、枠線で囲まれる円の、中の塗りつぶしを行います。
33# 塗りつぶしとは? : https://www.weblio.jp/content/%E5%A1%97%E3%82%8A%E6%BD%B0%E3%81%99#:~:text=%E3%81%AC%E3%82%8A%E2%80%90%E3%81%A4%E3%81%B6%E3%83%BB%E3%81%99%E3%80%90%E5%A1%97%E6%BD%B0%E3%80%91&text=%E2%91%A0%20%E4%B8%8B%E5%9C%B0%E3%81%8C%E8%A6%8B%E3%81%88%E3%81%AA%E3%81%84,%E4%B8%80%E9%9D%A2%E3%81%AB%E5%A1%97%E3%82%8B%E3%80%82&text=%E2%91%A1%20%E7%89%A9%E4%BA%8B%E3%82%92%E8%A6%86%E3%81%84%E3%81%8B%E3%81%8F%E3%81%99%E3%80%82
34# 例) thickness=4 ⏩ 円の枠線の太さを4pxとする。
35
36# lineType : 円の枠線の種類を指定する。cv2.LINE_4(4連結)、cv2.LINE_8(8連結)、cv2.LINE_AA(アンチエイリアス)のどれかを指定する。
37# デフォルト(lineTypeを指定しない場合)はcv2.LINE_8が設定される。
38# アンチエイリアスとは? : https://e-words.jp/w/%E3%82%A2%E3%83%B3%E3%83%81%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9.html
39# cv2.LINE_4(4連結)、cv2.LINE_8(8連結)は、ブレゼンハムのアルゴリズムを用いて枠線を描画する。
40# ブレゼンハムのアルゴリズムとは? : https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AC%E3%82%BC%E3%83%B3%E3%83%8F%E3%83%A0%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
41
42# shift : 第二引数の座標位置をずらすために利用します。int型(0以上の整数)。デフォルト(shiftを指定しない場合)は0が設定される。
43# (x * 2^(-shift), y * 2^(-shift))の結果を、第二引数の値とする。
44# 例) 第二引数を(50, 100)、shiftへ1を指定すると、第二引数を(25, 50)に変更される。
45
46cv2.circle(img, (整数, 整数), 0以上の整数, (0~255の整数, 0~255の整数, 0~255の整数), thickness=整数, lineType=(cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA)のどれか, shift=0以上の整数)

で定義されます。

例えば以下のようなコードを作成すると、

1import cv2
2import sys
3
4# imread : 画像ファイルを読み込んで、多次元配列(numpy.ndarray)にする。
5# imreadについて : https://kuroro.blog/python/wqh9VIEmRXS4ZAA7C4wd/
6# 第一引数 : 画像のファイルパス
7# 戻り値 : 行 x 列 x 色の三次元配列(numpy.ndarray)が返される。
8img = cv2.imread('./xxx.xxx')
9
10# 画像ファイルが正常に読み込めなかった場合、プログラムを終了する。
11if img is None:
12    sys.exit("Could not read the image.")
13
14# circle関数 : 画像内へ円を描画する関数
15
16# 第一引数(必須) : 多次元配列(画像情報)
17# 第二引数(必須) : 円の中心座標。tuple型。
18# 第三引数(必須) : 円の半径(px)を指定する。int型(0以上の整数のみ指定可能)。 
19# 第四引数(必須) : 円の色を指定する。B(Blue)G(Green)R(Red)形式で指定する。tuple型。
20
21# thickness : 円の枠線の太さ(px)を指定する。int型。デフォルト(thicknessを指定しない場合)は1が設定される。
22# 負の整数(-1, -3など)を与えると、枠線で囲まれる円の、中の塗りつぶしを行います。
23cv2.circle(img, (300, 250), 50, (255, 0, 0), thickness=-1)
24
25# imwrite : 画像の保存を行う関数
26# 第一引数 : 保存先の画像ファイル名
27# 第二引数 : 多次元配列(numpy.ndarray)
28# <第二引数の例>
29# [
30# [
31# [234 237 228]
32# ...
33# [202 209 194]
34# ]
35# [
36# [10 27 16]
37# ...
38# [36 67 46]
39# ]
40# [
41# [34 51 40]
42# ...
43# [50 81 60]
44# ]
45# ]
46# imwriteについて : https://kuroro.blog/python/i0tNE1Mp8aEz8Z7n6Ggg/
47cv2.imwrite('output.jpg', img)

以下の画像のように、画像が描画されます。

imreadに関しては、OpenCVで使われるimreadとは?使い方から配列が画像になる仕組みを解説でまとめていますので、詳しく知りたい方は是非ご確認ください。

imwriteに関しては、OpenCVで使われるimwriteとは?imwriteの定義から使用例をご紹介でまとめていますので、詳しく知りたい方は是非ご確認ください。

円の枠線の色と塗りつぶし色を変えたい場合

円の枠線の色と塗りつぶし色を変えたい場合は、先に塗りつぶし処理を行って、次に同じ位置で枠線を描画すると上手くいきます。一度に複数指定(塗りつぶしと枠線の描画)することは出来ません。

例えば以下のようなコードを作成すると、

1import cv2
2import sys
3
4# imread : 画像ファイルを読み込んで、多次元配列(numpy.ndarray)にする。
5# imreadについて : https://kuroro.blog/python/wqh9VIEmRXS4ZAA7C4wd/
6# 第一引数 : 画像のファイルパス
7# 戻り値 : 行 x 列 x 色の三次元配列(numpy.ndarray)が返される。
8img = cv2.imread('./xxx.xxx')
9
10# 画像ファイルが正常に読み込めなかった場合、プログラムを終了する。
11if img is None:
12    sys.exit("Could not read the image.")
13
14# circle関数 : 画像内へ円を描画する関数
15
16# 第一引数(必須) : 多次元配列(画像情報)
17# 第二引数(必須) : 円の中心座標。tuple型。
18# 第三引数(必須) : 円の半径(px)を指定する。int型(0以上の整数のみ指定可能)。 
19# 第四引数(必須) : 円の色を指定する。B(Blue)G(Green)R(Red)形式で指定する。tuple型。
20
21# thickness : 円の枠線の太さ(px)を指定する。int型。デフォルト(thicknessを指定しない場合)は1が設定される。
22# 負の整数(-1, -3など)を与えると、枠線で囲まれる円の、中の塗りつぶしを行います。
23cv2.circle(img, (300, 250), 50, (255, 0, 0), thickness=-1)
24cv2.circle(img, (300, 250), 50, (0, 0, 255), thickness=4)
25
26# imwrite : 画像の保存を行う関数
27# 第一引数 : 保存先の画像ファイル名
28# 第二引数 : 多次元配列(numpy.ndarray)
29# <第二引数の例>
30# [
31# [
32# [234 237 228]
33# ...
34# [202 209 194]
35# ]
36# [
37# [10 27 16]
38# ...
39# [36 67 46]
40# ]
41# [
42# [34 51 40]
43# ...
44# [50 81 60]
45# ]
46# ]
47# imwriteについて : https://kuroro.blog/python/i0tNE1Mp8aEz8Z7n6Ggg/
48cv2.imwrite('output.jpg', img)

以下の画像のように、画像が描画されます。

まとめ

  • OpenCVで使われるcircleとは、画像内へ円を描画する関数です。
  • 円の枠線の色と塗りつぶし色を変えたい場合は、先に塗りつぶし処理を行って、次に同じ位置で枠線を描画すると上手くいきます。

参考文献

記事に関するお問い合わせ