KURORO BLOGのロゴ

このエントリーをはてなブックマークに追加
OpenCVで使われるarrowedLineとは?関数の利用法からコードを解説

OpenCVで使われるarrowedLineとは?関数の利用法からコードを解説

今回はOpenCVで使われるarrowedLineに関して、関数の利用法からコードに関して徹底解説致します。コードを通してarrowedLine関数を学びたい、OpenCV初学者の方はおすすめです。ぜひ最後までご覧ください。

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

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

OpenCVで使われるarrowedLineとは?

OpenCVで使われるarrowedLineとは、2点の座標を与えることで画像内へ矢印を描画する関数です。

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

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

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

arrowedLine関数は、

1# cv2(OpenCV)を利用する宣言を行う。
2import cv2
3
4# arrowedLine関数 : 2点の座標を与えることで、画像内へ矢印を描画する関数
5# arrowedLine関数公式ドキュメント : https://docs.opencv.org/3.4.0/d6/d6e/group__imgproc__draw.html#ga0a165a3ca093fd488ac709fdf10c05b2
6
7# 第一引数(必須) : 多次元配列(画像情報)
8
9###############################
10# 第二引数(必須) : 2点の座標の1つ。矢印の始点。tuple型。
11# 始点とは? : https://www.weblio.jp/content/%E5%A7%8B%E7%82%B9#:~:text=%E3%81%97%E2%80%90%E3%81%A6%E3%82%93%E3%80%90%E5%A7%8B%E7%82%B9%E3%80%91,%E2%87%94%E7%B5%82%E7%82%B9%E3%80%82
12# tuple型とは? : https://atmarkit.itmedia.co.jp/ait/articles/1906/14/news015.html
13# 例) : (100, 150) ⏩ 2点の座標の1つをx座標100px, y座標150pxとする。
14# ※ 第二引数を指定する際は、画像の左上角が(0, 0)であることに留意する。
15############################### 
16
17###############################
18# 第三引数(必須) : 2点の座標のもう1つ。矢印の終点。tuple型。
19# 終点とは? : https://dictionary.goo.ne.jp/word/%E7%B5%82%E7%82%B9/
20# tuple型とは? : https://atmarkit.itmedia.co.jp/ait/articles/1906/14/news015.html
21# 例) : (70, 80) ⏩ 2点の座標のもう1つをx座標70px, y座標80pxとする。
22# ※ 第三引数を指定する際は、画像の左上角が(0, 0)であることに留意する。
23############################### 
24
25###############################
26# 第四引数(必須) : 矢印の色を指定する。B(Blue)G(Green)R(Red)形式で指定する。tuple型。
27# 例) : (255, 0, 0) ⏩ 矢印の色を青色にする。
28# 以下のサイトを利用して、矢印の色を考えると良いでしょう。
29# https://www.peko-step.com/tool/tfcolor.html
30###############################
31
32# <第五引数以降(順不同、任意)>
33# thickness : 矢印の太さ(px)を指定する。int型(1以上の整数)。デフォルト(thicknessを指定しない場合)は1が設定される。
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# また太い矢印線(thicknessの値が大きい場合)の端は丸く描画されます。
42
43# shift : 第二引数、第三引数の座標位置をずらすために利用します。int型(0以上の整数)。デフォルト(shiftを指定しない場合)は0が設定される。
44# (x * 2^(-shift), y * 2^(-shift))の結果を、第二引数、第三引数の値とする。
45# 例) 第二引数を(50, 100)、shiftへ1を指定すると、第二引数を(25, 50)に変更される。
46
47# tipLength : 矢印の先の長さを設定するために利用します。float型。
48# デフォルト(tipLengthを指定しない場合)は0.1が設定される。
49# ※ 矢印線に対して何割を矢印の先の長さとするか?と考えると良いでしょう。
50# ※ 負の値を代入すると、矢印の先の向きを逆に設定します。
51# 例) tipLength=0.4 ⏩ 矢印線 x 0.4の長さで矢印の先の長さを設定する。
52
53cv2.arrowedLine(img, (整数, 整数), (整数, 整数), (0~255の整数, 0~255の整数, 0~255の整数), thickness=1以上の整数, lineType=(cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA)のどれか, shift=0以上の整数, tipLength=数字(小数でも可))

で定義されます。

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

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# 第二引数(必須) : 2点の座標の1つ。矢印の始点。tuple型。
16# 第三引数(必須) : 2点の座標のもう1つ。矢印の終点。tuple型。
17# 第四引数(必須) : 矢印の色を指定する。B(Blue)G(Green)R(Red)形式で指定する。tuple型。
18# thickness : 矢印の太さ(px)を指定する。
19# tipLength : 矢印の先の長さを設定するために利用します。float型。
20cv2.arrowedLine(img, (200, 250), (300, 300), (255, 0, 0), thickness=4, tipLength=0.5)
21
22# imwrite : 画像の保存を行う関数
23# 第一引数 : 保存先の画像ファイル名
24# 第二引数 : 多次元配列(numpy.ndarray)
25# <第二引数の例>
26# [
27# [
28# [234 237 228]
29# ...
30# [202 209 194]
31# ]
32# [
33# [10 27 16]
34# ...
35# [36 67 46]
36# ]
37# [
38# [34 51 40]
39# ...
40# [50 81 60]
41# ]
42# ]
43# imwriteについて : https://kuroro.blog/python/i0tNE1Mp8aEz8Z7n6Ggg/
44cv2.imwrite('output.jpg', img)

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

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

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

まとめ

  • OpenCVで使われるarrowedLineとは、2点の座標を与えることで画像内へ矢印を描画する関数を意味する。

参考文献

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