KURORO BLOGのロゴ

このエントリーをはてなブックマークに追加
OpenCVで使われるdrawMarkerとは?サンプルコードを用いて解説!?

OpenCVで使われるdrawMarkerとは?サンプルコードを用いて解説!?

今回はOpenCVで使われるdrawMarkerに関して、サンプルコードを用いて活用法から各引数の用途などを徹底解説致します。drawMarker関数の使い方がわからない、OpenCV入門者の方はおすすめです。ぜひ最後までご覧ください。

目次
  1. OpenCVで使われるdrawMarkerとは?
  2. OpenCVで使われるdrawMarker関数の定義
  3. まとめ
  4. 参考文献

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

OpenCVで使われるdrawMarkerとは?

OpenCVで使われるdrawMarkerとは、画像内へマーカーを描画する関数です。

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

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

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

drawMarker関数は、

1# cv2(OpenCV)を利用する宣言を行う。
2import cv2
3
4# drawMarker関数 : 画像内へマーカーを描画する関数。
5# drawMarker関数 - 公式ドキュメント : https://docs.opencv.org/3.4.0/d6/d6e/group__imgproc__draw.html#ga482fa7b0f578fcdd8a174904592a6250
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# 第三引数(必須) : マーカーの色を指定する。B(Blue)G(Green)R(Red)形式で指定する。tuple型。
18# 例) : (255, 0, 0) ⏩ マーカーの色を青色にする。
19# 以下のサイトを利用して、マーカーの色を考えると良いでしょう。
20# https://www.peko-step.com/tool/tfcolor.html
21###############################
22
23# <第四引数以降(順不同、任意)>
24
25###############################
26# markerType : マーカーの種類を指定する。デフォルト(markerTypeを指定しない場合)はcv2.MARKER_CROSSが設定される。
27# markerType - 公式ドキュメント : https://docs.opencv.org/3.4.0/d6/d6e/group__imgproc__draw.html#ga0ad87faebef1039ec957737ecc633b7b
28
29# cv2.MARKER_CROSS : 十のマーカーを指定する。
30# cv2.MARKER_TILTED_CROSS : ×のマーカーを指定する。
31# cv2.MARKER_STAR : ✴︎のマーカーを指定する。
32# cv2.MARKER_DIAMOND : ♢のマーカーを指定する。
33# cv2.MARKER_SQUARE : □のマーカーを指定する。
34# cv2.MARKER_TRIANGLE_UP : △のマーカーを指定する。
35# cv2.MARKER_TRIANGLE_DOWN : ▽のマーカーを指定する。
36
37# 例) markerType=cv2.MARKER_TRIANGLE_DOWN ⏩ マーカーの種類を▽とする。
38############################### 
39
40# markerSize : マーカーの大きさ(px)を設定します。int型。デフォルト(markerSizeを指定しない場合)は20が設定される。
41# 負の整数を指定すると、マーカーの向きが反転します。(▽のマーカーの場合、△のマーカーで出力される。)
42# 例) markerSize=-30 ⏩ マーカーの向きを反転させて、マーカーの大きさを30pxとする。
43
44# thickness : マーカーの線の太さ(px)を指定する。int型(1以上の整数)。デフォルト(thicknessを指定しない場合)は1が設定される。
45# 例) thickness=4 ⏩ マーカーの線の太さを4pxとする。
46
47# lineType : マーカーの線の種類を指定する。cv2.LINE_4(4連結)、cv2.LINE_8(8連結)、cv2.LINE_AA(アンチエイリアス)のどれかを指定する。
48# デフォルト(lineTypeを指定しない場合)はcv2.LINE_8が設定される。
49# アンチエイリアスとは? : 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
50# cv2.LINE_4(4連結)、cv2.LINE_8(8連結)は、ブレゼンハムのアルゴリズムを用いてマーカーの線を描画する。
51# ブレゼンハムのアルゴリズムとは? : 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
52# また太いマーカーの線の(thicknessの値が大きい)の端は丸く描画されます。
53
54cv2.drawMarker(img, (整数, 整数), (0~255の整数, 0~255の整数, 0~255の整数), markerType=(cv2.MARKER_CROSS, cv2.MARKER_TILTED_CROSS, cv2.MARKER_STAR, cv2.MARKER_DIAMOND, cv2.MARKER_SQUARE, cv2.MARKER_TRIANGLE_UP, cv2.MARKER_TRIANGLE_DOWN)のどれか, markerSize=整数, thickness=1以上の整数, lineType=(cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA)のどれか)

で定義されます。

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

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# 第一引数(必須) : 多次元配列(numpy.ndarray)
15# 第二引数(必須) : マーカーの位置座標。tuple型。
16# 第三引数(必須) : マーカーの色を指定する。B(Blue)G(Green)R(Red)形式で指定する。tuple型。
17# markerType : マーカーの種類を指定する。
18# thickness : マーカーの線の太さ(px)を指定する。
19
20cv2.drawMarker(img, (150, 200), (255, 0, 0), markerType=cv2.MARKER_CROSS, thickness=4)
21cv2.drawMarker(img, (180, 200), (255, 0, 0), markerType=cv2.MARKER_TILTED_CROSS, thickness=4)
22cv2.drawMarker(img, (210, 200), (255, 0, 0), markerType=cv2.MARKER_STAR, thickness=4)
23cv2.drawMarker(img, (240, 200), (255, 0, 0), markerType=cv2.MARKER_DIAMOND, thickness=4)
24cv2.drawMarker(img, (270, 200), (255, 0, 0), markerType=cv2.MARKER_SQUARE, thickness=4)
25cv2.drawMarker(img, (300, 200), (255, 0, 0), markerType=cv2.MARKER_TRIANGLE_UP, thickness=4)
26cv2.drawMarker(img, (330, 200), (255, 0, 0), markerType=cv2.MARKER_TRIANGLE_DOWN, thickness=4)
27
28# imwrite : 画像の保存を行う関数
29# 第一引数 : 保存先の画像ファイル名
30# 第二引数 : 多次元配列(numpy.ndarray)
31# <第二引数の例>
32# [
33# [
34# [234 237 228]
35# ...
36# [202 209 194]
37# ]
38# [
39# [10 27 16]
40# ...
41# [36 67 46]
42# ]
43# [
44# [34 51 40]
45# ...
46# [50 81 60]
47# ]
48# ]
49# imwriteについて : https://kuroro.blog/python/i0tNE1Mp8aEz8Z7n6Ggg/
50cv2.imwrite('output.jpg', img)

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

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

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

まとめ

  • OpenCVで使われるdrawMarkerとは、画像内へマーカーを描画する関数を意味する。

参考文献

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