基本図形の描画1 – 線分・矢印・マーカー・文字【OpenCV】

線分の描画

line関数を用いて、画像・始点・終点・色を指定することで線分を描画します。

import numpy as np
import cv2

img = np.zeros((500, 500, 3), np.uint8)
cv2.line(img, (100, 100), (400, 400), (255, 0, 255))

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

line関数のthickness引数で線分の太さを調節することができます。

import numpy as np
import cv2

img = np.zeros((500, 500, 3), np.uint8)
cv2.line(img, (400, 100), (100, 400), (255, 255, 0), thickness=10)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

矢印の描画

line関数の代わりにarrowedLine関数を用いることで矢印を描画します。

import numpy as np
import cv2

img = np.zeros((500, 500, 3), np.uint8)
cv2.arrowedLine(img, (100, 100), (400, 400), (255, 255, 0), thickness=5)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

arrowedLine関数のtipLength引数で矢印の矢の部分の長さを指定できます。

import numpy as np
import cv2

img = np.zeros((500, 500, 3), np.uint8)
cv2.arrowedLine(img, (100, 100), (400, 400), (255, 255, 0), thickness=5, tipLength=0.5)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

マーカーの描画

drawMarker関数で画像・座標・色を指定することでマーカーを描画できます。markerSize引数でマーカーの大きさを、thickness引数でマーカーの太さを指定できます。

import numpy as np
import cv2

img = np.zeros((500, 500, 3), np.uint8)
cv2.drawMarker(img, (100, 100), (255, 255, 0))
cv2.drawMarker(img, (200, 100), (255, 255, 0), markerSize=30)
cv2.drawMarker(img, (300, 100), (255, 255, 0), markerSize=40)
cv2.drawMarker(img, (400, 100), (255, 255, 0), markerSize=50)
cv2.drawMarker(img, (100, 200), (255, 255, 0))
cv2.drawMarker(img, (200, 200), (255, 255, 0), thickness=5)
cv2.drawMarker(img, (300, 200), (255, 255, 0), thickness=10)
cv2.drawMarker(img, (400, 200), (255, 255, 0), thickness=15)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

drawMarker関数のmarkerType引数でマーカーの種類を指定できます。

import numpy as np
import cv2

img = np.zeros((500, 500, 3), np.uint8)
cv2.drawMarker(img, (100, 100), (255, 255, 0), markerType=cv2.MARKER_CROSS)
cv2.drawMarker(img, (200, 100), (255, 255, 0), markerType=cv2.MARKER_TILTED_CROSS)
cv2.drawMarker(img, (300, 100), (255, 255, 0), markerType=cv2.MARKER_STAR)
cv2.drawMarker(img, (400, 100), (255, 255, 0), markerType=cv2.MARKER_DIAMOND)
cv2.drawMarker(img, (100, 200), (255, 255, 0), markerType=cv2.MARKER_SQUARE)
cv2.drawMarker(img, (200, 200), (255, 255, 0), markerType=cv2.MARKER_TRIANGLE_UP)
cv2.drawMarker(img, (300, 200), (255, 255, 0), markerType=cv2.MARKER_TRIANGLE_DOWN)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

文字の描画

putText関数で画像・文字列・座標・フォント・サイズ・色を指定することで文字を描画できます。フォントには以下のような種類があります。

import numpy as np
import cv2

img = np.zeros((500, 700, 3), np.uint8)
cv2.putText(img, 'FONT_HERSHEY_SIMPLEX', (50, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0))
cv2.putText(img, 'FONT_HERSHEY_PLAIN', (50, 150), cv2.FONT_HERSHEY_PLAIN, 1, (255, 255, 0))
cv2.putText(img, 'FONT_HERSHEY_DUPLEX', (50, 200), cv2.FONT_HERSHEY_DUPLEX, 1, (255, 255, 0))
cv2.putText(img, 'FONT_HERSHEY_COMPLEX', (50, 250), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 0))
cv2.putText(img, 'FONT_HERSHEY_TRIPLEX', (50, 300), cv2.FONT_HERSHEY_TRIPLEX, 1, (255, 255, 0))
cv2.putText(img, 'FONT_HERSHEY_COMPLEX_SMALL', (50, 350), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (255, 255, 0))
cv2.putText(img, 'FONT_HERSHEY_SCRIPT_SIMPLEX', (50, 400), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, 1, (255, 255, 0))
cv2.putText(img, 'FONT_HERSHEY_SCRIPT_COMPLEX', (50, 450), cv2.FONT_HERSHEY_SCRIPT_COMPLEX, 1, (255, 255, 0))

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

リファレンス

arrowedLine(img, pt1, pt2, color, thickness = 1, line_type = cv2.LINE_8, shift = 0, tipLength = 0.1)

@ [APIドキュメント]

  • 引数
    • img : 矢印を描画する画像 <ndarray>
      • 引数として指定したimgにも矢印が上書きされてしまうので注意!
    • pt1 : 始点の座標 <Point>
    • pt2 : 終点の座標(矢印の’矢’がつく座標) <Point>
    • color : 矢印の色 <Scalar>
    • thickness : 矢印を描く線の太さ <int>
    • line_type : 矢印を描く線の種類(LineTypes列挙型で指定します) <int>
    • shift : 座標の小数点以下の桁を表すビット数 <int>
    • tipLength : 矢印の矢の部分の長さの割合 <float>
  • 戻り値
    • img : 矢印が描画された画像 <ndarray>

矢印を描画します。

drawMarker(img, position, color, markerType = cv2.MARKER_CROSS, markerSize = 20, thickness = 1, line_type = cv2.LINE_8)

@ [APIドキュメント]

  • 引数
    • img : マーカーを描画する画像 <ndarray>
      • 引数として指定したimgにもマーカーが上書きされてしまうので注意!
    • position : マーカーの座標 <Point>
    • color : マーカーの色 <Scalar>
    • markerType : マーカーのタイプ(MarkerTypes列挙型で指定します) <int>
    • markerSize : マーカーのサイズ <int>
    • thickness : マーカーを描く線の太さ <int>
    • line_type : マーカーを描く線の種類(LineTypes列挙型で指定します) <int>
  • 戻り値
    • img : マーカーを描画した画像 <ndarray>

指定されたマーカーを描画します。

line(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 : 線分を描く線の種類(LineTypes列挙型で指定します) <int>
    • shift : 座標の小数点以下の桁を表すビット数 <int>
  • 戻り値
    • img : 線分が描画された画像 <ndarray>

指定された2点を結ぶ線分を描画します。

putText(img, text, org, fontFace, fontScale, color, thickness = 1, lineType = cv2.LINE_8, bottomLeftOrigin = False)

@ [APIドキュメント]

  • 引数
    • img : 文字列を描画する画像 <ndarray>
      • 引数として指定したimgにも文字列が上書きされてしまうので注意!
    • text : 描画する文字列 <str>
    • org : 文字列の左下隅の座標 <Point>
    • fontFace : フォントの種類(HersheyFonts列挙型で指定します) <int>
    • fontScale : フォントのスケールファクタ <float>
    • color : フォントの色 <Scalar>
    • thickness : フォントの太さ <int>
    • lineType : フォントの線の種類(LineTypes列挙型で指定します) <int>
    • bottomLeftOrigin : 画像データの原点の位置を指定します <bool>
      • True -> 画像データの左下が原点
      • False -> 画像データの左上が原点
  • 戻り値
    • img : 文字列が描画された画像 <ndarray>

指定された文字列を画像に描画します。

列挙型

HersheyFonts

@ [APIドキュメント]

FONT_HERSHEY_SIMPLEX0サンセリフ体(普通サイズ)
FONT_HERSHEY_PLAIN1サンセリフ体(小さいサイズ)
FONT_HERSHEY_DUPLEX2サンセリフ体(普通サイズ、SIMPLEXより複雑)
FONT_HERSHEY_COMPLEX3セリフ体(普通サイズ)
FONT_HERSHEY_TRIPLEX4セリフ体(普通サイズ、COMPLEXより複雑)
FONT_HERSHEY_COMPLEX_SMALL5セリフ体(小さいサイズ)
FONT_HERSHEY_SCRIPT_SIMPLEX6手書き風フォント
FONT_HERSHEY_SCRIPT_COMPLEX7手書き風フォント(SIMPLEXより複雑)
FONT_ITALIC16イタリック体(他のフォントと組み合わせて使う)

LineTypes

@ [APIドキュメント]

FILLED-1
LINE_444連結
LINE_888連結
LINE_AA16アンチエイリアス

MarkerTypes

@ [APIドキュメント]

MARKER_CROSS0「+」マーカー
MARKER_TILTED_CROSS1「×」マーカー
MARKER_STAR2「*」マーカー
MARKER_DIAMOND3「◇」マーカー
MARKER_SQUARE4「□」マーカー
MARKER_TRIANGLE_UP5「△」マーカー
MARKER_TRIANGLE_DOWN6「▽」マーカー

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

コメントを残す

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